fix double call to state_advance
git-svn-id: http://svn.openzap.org/svn/openzap/branches/sangoma_boost@1058 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
parent
5305611be3
commit
dd39a902e6
|
@ -746,6 +746,7 @@ static switch_status_t channel_write_frame(switch_core_session_t *session, switc
|
||||||
len = frame->datalen;
|
len = frame->datalen;
|
||||||
if (ftdm_channel_write(tech_pvt->ftdmchan, frame->data, frame->buflen, &len) != FTDM_SUCCESS) {
|
if (ftdm_channel_write(tech_pvt->ftdmchan, frame->data, frame->buflen, &len) != FTDM_SUCCESS) {
|
||||||
if (++tech_pvt->wr_error > 10) {
|
if (++tech_pvt->wr_error > 10) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "too many I/O write errors!\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1229,7 +1229,7 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan)
|
||||||
ftdm_sigmsg_t sig;
|
ftdm_sigmsg_t sig;
|
||||||
ftdm_status_t status;
|
ftdm_status_t status;
|
||||||
|
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "%d:%d STATE [%s]\n", ftdmchan->span_id, ftdmchan->chan_id, ftdm_channel_state2str(ftdmchan->state));
|
ftdm_log(FTDM_LOG_DEBUG, "%d:%d PROCESSING STATE [%s]\n", ftdmchan->span_id, ftdmchan->chan_id, ftdm_channel_state2str(ftdmchan->state));
|
||||||
|
|
||||||
memset(&sig, 0, sizeof(sig));
|
memset(&sig, 0, sizeof(sig));
|
||||||
sig.chan_id = ftdmchan->chan_id;
|
sig.chan_id = ftdmchan->chan_id;
|
||||||
|
@ -1470,10 +1470,15 @@ static __inline__ void check_state(ftdm_span_t *span)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while ((ftdmchan = ftdm_queue_dequeue(span->pendingchans))) {
|
while ((ftdmchan = ftdm_queue_dequeue(span->pendingchans))) {
|
||||||
|
/* it can happen that someone else processed the chan states
|
||||||
|
* but without taking the chan out of the queue, so check th
|
||||||
|
* flag before advancing the state */
|
||||||
ftdm_mutex_lock(ftdmchan->mutex);
|
ftdm_mutex_lock(ftdmchan->mutex);
|
||||||
ftdm_clear_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE);
|
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE)) {
|
||||||
state_advance(ftdmchan);
|
ftdm_clear_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE);
|
||||||
ftdm_channel_complete_state(ftdmchan);
|
state_advance(ftdmchan);
|
||||||
|
ftdm_channel_complete_state(ftdmchan);
|
||||||
|
}
|
||||||
ftdm_mutex_unlock(ftdmchan->mutex);
|
ftdm_mutex_unlock(ftdmchan->mutex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue