[Asterisk-cvs] asterisk/apps app_externalivr.c,1.7,1.8
kpfleming
kpfleming
Wed Sep 7 11:31:39 CDT 2005
Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv29377/apps
Modified Files:
app_externalivr.c
Log Message:
fix some race conditions
Index: app_externalivr.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_externalivr.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- app_externalivr.c 1 Sep 2005 19:44:51 -0000 1.7
+++ app_externalivr.c 7 Sep 2005 15:32:01 -0000 1.8
@@ -60,7 +60,7 @@
struct localuser *next;
AST_LIST_HEAD(playlist, playlist_entry) playlist;
AST_LIST_HEAD(finishlist, playlist_entry) finishlist;
- int list_cleared;
+ int abort_current_sound;
int playing_silence;
int option_autoclear;
};
@@ -85,8 +85,7 @@
snprintf(tmp, sizeof(tmp), "%c,%10ld,%s", event, time(NULL), data);
}
- fputs(tmp, handle);
- fputc('\n', handle);
+ fprintf(handle, "%s\n", tmp);
ast_chan_log(LOG_DEBUG, chan, "sent '%s'\n", tmp);
}
@@ -129,7 +128,7 @@
struct localuser *u = state->u;
char *file_to_stream;
- u->list_cleared = 0;
+ u->abort_current_sound = 0;
u->playing_silence = 0;
gen_closestream(state);
@@ -160,7 +159,7 @@
struct ast_frame *f = NULL;
struct localuser *u = state->u;
- if (u->list_cleared ||
+ if (u->abort_current_sound ||
(u->playing_silence && AST_LIST_FIRST(&u->playlist))) {
gen_closestream(state);
AST_LIST_LOCK(&u->playlist);
@@ -275,7 +274,7 @@
goto exit;
}
- u->list_cleared = 0;
+ u->abort_current_sound = 0;
AST_LIST_HEAD_INIT(&u->playlist);
AST_LIST_HEAD_INIT(&u->finishlist);
@@ -388,15 +387,15 @@
if (f->frametype == AST_FRAME_DTMF) {
send_child_event(child_events, f->subclass, NULL, chan);
if (u->option_autoclear) {
- if (!u->list_cleared && !u->playing_silence)
+ if (!u->abort_current_sound && !u->playing_silence)
send_child_event(child_events, 'T', NULL, chan);
AST_LIST_LOCK(&u->playlist);
while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list))) {
- if (!u->playing_silence)
- send_child_event(child_events, 'D', entry->filename, chan);
+ send_child_event(child_events, 'D', entry->filename, chan);
free(entry);
}
- u->list_cleared = 1;
+ if (!u->playing_silence)
+ u->abort_current_sound = 1;
AST_LIST_UNLOCK(&u->playlist);
}
} else if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP)) {
@@ -432,15 +431,15 @@
send_child_event(child_events, 'Z', NULL, chan);
strcpy(&input[2], "exception");
}
- if (!u->list_cleared && !u->playing_silence)
+ if (!u->abort_current_sound && !u->playing_silence)
send_child_event(child_events, 'T', NULL, chan);
AST_LIST_LOCK(&u->playlist);
while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list))) {
- if (!u->playing_silence)
- send_child_event(child_events, 'D', entry->filename, chan);
+ send_child_event(child_events, 'D', entry->filename, chan);
free(entry);
}
- u->list_cleared = 1;
+ if (!u->playing_silence)
+ u->abort_current_sound = 1;
entry = make_entry(&input[2]);
if (entry)
AST_LIST_INSERT_TAIL(&u->playlist, entry, list);
More information about the svn-commits
mailing list