提交 e401b146 authored 作者: Moises Silva's avatar Moises Silva

freetdm: Fix gsm hangup race

上级 2d03e1af
...@@ -193,7 +193,8 @@ int on_wat_span_write(unsigned char span_id, void *buffer, unsigned len) ...@@ -193,7 +193,8 @@ int on_wat_span_write(unsigned char span_id, void *buffer, unsigned len)
gsm_data = span->signal_data; gsm_data = span->signal_data;
status = ftdm_channel_write(gsm_data->dchan, (void *)buffer, len, &outsize); status = ftdm_channel_write(gsm_data->dchan, (void *)buffer, len, &outsize);
if (status != FTDM_SUCCESS) { if (status != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_ERROR, "Failed to write %d bytes to d-channel in span %s\n", len, span->name); char errbuf[255];
ftdm_log(FTDM_LOG_ERROR, "Failed to write %d bytes to d-channel in span %s: %s\n", len, span->name, strerror_r(errno, errbuf, sizeof(errbuf)));
return -1; return -1;
} }
return len; return len;
...@@ -345,13 +346,16 @@ void on_wat_rel_ind(unsigned char span_id, uint8_t call_id, wat_rel_event_t *rel ...@@ -345,13 +346,16 @@ void on_wat_rel_ind(unsigned char span_id, uint8_t call_id, wat_rel_event_t *rel
ftdm_log(FTDM_LOG_INFO, "s%d: Call hangup (id:%d) cause:%d\n", span_id, call_id, rel_event->cause); ftdm_log(FTDM_LOG_INFO, "s%d: Call hangup (id:%d) cause:%d\n", span_id, call_id, rel_event->cause);
if(!(span = GetSpanByID(span_id, &gsm_data))) { if (!(span = GetSpanByID(span_id, &gsm_data))) {
return; return;
} }
ftdm_set_state(gsm_data->bchan, FTDM_CHANNEL_STATE_HANGUP); if (gsm_data->bchan->state == FTDM_CHANNEL_STATE_HANGUP ||
gsm_data->bchan->state == FTDM_CHANNEL_STATE_DOWN) {
return;
}
ftdm_set_state(gsm_data->bchan, FTDM_CHANNEL_STATE_HANGUP);
} }
void on_wat_rel_cfm(unsigned char span_id, uint8_t call_id) void on_wat_rel_cfm(unsigned char span_id, uint8_t call_id)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论