From: Richard Mudgett Date: Tue, 12 Jun 2018 20:13:14 +0000 (-0500) Subject: channel: Fix some more unprotected channel flag setting. X-Git-Tag: 15.5.0-rc1~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=917cb28a353824e5a6ba23abe1665de439486945;p=thirdparty%2Fasterisk.git channel: Fix some more unprotected channel flag setting. Change-Id: I34c3b1201b1de539945bcfdcb264fff30332d48c --- diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 36f5deb9b8..77c6906112 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -10035,7 +10035,9 @@ static void *analog_ss_thread(void *data) * emulation. The DTMF digits can come so fast that emulation * can drop some of them. */ + ast_channel_lock(chan); ast_set_flag(ast_channel_flags(chan), AST_FLAG_END_DTMF_ONLY); + ast_channel_unlock(chan); off_ms = 4000;/* This is a typical OFF time between rings. */ for (;;) { struct ast_frame *f; @@ -10068,7 +10070,9 @@ static void *analog_ss_thread(void *data) ast_channel_state(chan) == AST_STATE_RINGING) break; /* Got ring */ } + ast_channel_lock(chan); ast_clear_flag(ast_channel_flags(chan), AST_FLAG_END_DTMF_ONLY); + ast_channel_unlock(chan); dtmfbuf[k] = '\0'; dahdi_setlinear(p->subs[idx].dfd, p->subs[idx].linear); /* Got cid and ring. */ diff --git a/channels/sig_analog.c b/channels/sig_analog.c index 110942cba0..7f78daa778 100644 --- a/channels/sig_analog.c +++ b/channels/sig_analog.c @@ -2402,7 +2402,9 @@ static void *__analog_ss_thread(void *data) * emulation. The DTMF digits can come so fast that emulation * can drop some of them. */ + ast_channel_lock(chan); ast_set_flag(ast_channel_flags(chan), AST_FLAG_END_DTMF_ONLY); + ast_channel_unlock(chan); timeout_ms = 4000;/* This is a typical OFF time between rings. */ for (;;) { struct ast_frame *f; @@ -2437,7 +2439,9 @@ static void *__analog_ss_thread(void *data) break; /* Got ring */ } } + ast_channel_lock(chan); ast_clear_flag(ast_channel_flags(chan), AST_FLAG_END_DTMF_ONLY); + ast_channel_unlock(chan); dtmfbuf[k] = '\0'; analog_set_linear_mode(p, idx, oldlinearity); diff --git a/main/channel.c b/main/channel.c index 92ec444d41..f056435334 100644 --- a/main/channel.c +++ b/main/channel.c @@ -5922,7 +5922,9 @@ struct ast_channel *__ast_request_and_dial(const char *type, struct ast_format_c */ ast_set_callerid(chan, cid_num, cid_name, cid_num); + ast_channel_lock(chan); ast_set_flag(ast_channel_flags(chan), AST_FLAG_ORIGINATED); + ast_channel_unlock(chan); ast_party_connected_line_set_init(&connected, ast_channel_connected(chan)); if (cid_num) { connected.id.number.valid = 1;