aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-12-20 12:58:37 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-12-20 12:58:37 +0000
commit33b057f6e479c00c23759340a753bc72e9501fc4 (patch)
tree7d51d652162bd7fad934c8f7cab897112e92d979
parent6b531045b69ca0426150a216fa0de4787bd5db9e (diff)
backport fix for larger-than-20ms-frames from trunk (bug #5697)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@7546 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_meetme.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 5c1ca90c1..40cfb616e 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -263,14 +263,17 @@ static char *istalking(int x)
return "(not talking)";
}
-static int careful_write(int fd, unsigned char *data, int len)
+static int careful_write(int fd, unsigned char *data, int len, int block)
{
int res;
int x;
while (len) {
- x = ZT_IOMUX_WRITE | ZT_IOMUX_SIGEVENT;
- res = ioctl(fd, ZT_IOMUX, &x);
+ if (block) {
+ x = ZT_IOMUX_WRITE | ZT_IOMUX_SIGEVENT;
+ res = ioctl(fd, ZT_IOMUX, &x);
+ } else
+ res = 0;
if (res >= 0)
res = write(fd, data, len);
if (res < 1) {
@@ -423,7 +426,7 @@ static void conf_play(struct ast_channel *chan, struct ast_conference *conf, int
len = 0;
}
if (data)
- careful_write(conf->fd, data, len);
+ careful_write(conf->fd, data, len, 1);
ast_mutex_unlock(&conflock);
@@ -1307,7 +1310,11 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
audio frames (in which case carefully writing would only
have delayed the audio even further).
*/
- write(fd, f->data, f->datalen);
+ /* As it turns out, we do want to use careful write. We just
+ don't want to block, but we do want to at least *try*
+ to write out all the samples.
+ */
+ careful_write(fd, f->data, f->datalen, 0);
}
} else if ((f->frametype == AST_FRAME_DTMF) && (confflags & CONFFLAG_EXIT_CONTEXT)) {
char tmp[2];