FT_DECLARE(ftdm_status_t) _ftdm_channel_reset(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan)
{
ftdm_assert_return(ftdmchan != NULL, FTDM_FAIL, "null channel");
-#ifdef __WINDOWS__
- UNREFERENCED_PARAMETER(file);
- UNREFERENCED_PARAMETER(func);
- UNREFERENCED_PARAMETER(line);
-#endif
ftdm_channel_lock(ftdmchan);
- ftdm_channel_set_state(file, func, line, ftdmchan, FTDM_CHANNEL_STATE_RESET, 0);
+ ftdm_channel_set_state(file, func, line, ftdmchan, FTDM_CHANNEL_STATE_RESET, 1);
ftdm_channel_unlock(ftdmchan);
return FTDM_SUCCESS;
}
ftdm_log_chan(ftdmchan, FTDM_LOG_WARNING, "channel dropped data: txdrops = %d, rxdrops = %d\n",
ftdmchan->txdrops, ftdmchan->rxdrops);
}
-
- ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "channel done\n");
+
memset(&ftdmchan->caller_data, 0, sizeof(ftdmchan->caller_data));
ftdm_clear_flag(ftdmchan, FTDM_CHANNEL_HOLD);
ftdmchan->packet_len = ftdmchan->native_interval * (ftdmchan->effective_codec == FTDM_CODEC_SLIN ? 16 : 8);
ftdm_clear_flag(ftdmchan, FTDM_CHANNEL_TRANSCODE);
}
+ ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "channel done\n");
ftdm_mutex_unlock(ftdmchan->mutex);
return FTDM_SUCCESS;
}
if (ftdm_test_flag(check, FTDM_CHANNEL_OPEN)) {
status = check->fio->close(check);
if (status == FTDM_SUCCESS) {
- ftdm_clear_flag(check, FTDM_CHANNEL_INUSE);
ftdm_channel_done(check);
*ftdmchan = NULL;
}
release_request_id((m3ua_request_id_t)ftdmchan->extra_id);
ftdmchan->extra_id = 0;
}
- ftdm_channel_close(ftdmchan);
+ ftdm_channel_close(&ftdmchan);
}
break;
case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
}
Q931ReleaseCRV(&isdn_data->q931, gen->CRV);
}
- ftdm_channel_close(ftdmchan);
+ ftdm_channel_close(&ftdmchan);
}
break;
case FTDM_CHANNEL_STATE_PROGRESS:
switch (ftdmchan->state) {
case FTDM_CHANNEL_STATE_DOWN:
- {
- ftdm_channel_close(ftdmchan);
+ {
ftdmchan->call_data = NULL;
+ ftdm_channel_close(&ftdmchan);
- ftdm_channel_close(peerchan);
peerchan->call_data = NULL;
+ ftdm_channel_close(&peerchan);
}
break;
if ((ftdmchan = find_ftdmchan(span, event, 1))) {
ftdm_log(FTDM_LOG_DEBUG, "Releasing completely chan s%dc%d\n", BOOST_EVENT_SPAN(mcon->sigmod, event),
BOOST_EVENT_CHAN(mcon->sigmod, event));
- ftdm_channel_close(ftdmchan);
+ ftdm_channel_close(&ftdmchan);
} else {
ftdm_log(FTDM_LOG_CRIT, "Odd, We could not find chan: s%dc%d to release the call completely!!\n",
BOOST_EVENT_SPAN(mcon->sigmod, event), BOOST_EVENT_CHAN(mcon->sigmod, event));
ftdm_set_state_r(ftdmchan, FTDM_CHANNEL_STATE_IN_LOOP, res);
if (res != FTDM_SUCCESS) {
+ ftdm_channel_t *toclose = ftdmchan;
ftdm_log(FTDM_LOG_CRIT, "yay, could not set the state of the channel to IN_LOOP, loop will fail\n");
- ftdm_channel_close(ftdmchan);
+ ftdm_channel_close(&toclose);
return;
}
ftdm_log(FTDM_LOG_DEBUG, "%d:%d starting loop\n", ftdmchan->span_id, ftdmchan->chan_id);
ftdm_log(FTDM_LOG_DEBUG, "Waiting for call release confirmation before declaring chan %d:%d as available \n",
ftdmchan->span_id, ftdmchan->chan_id);
} else {
- ftdm_channel_close(ftdmchan);
+ ftdm_channel_t *toclose = ftdmchan;
+ ftdm_channel_close(&toclose);
}
}
break;