pjsip_tx_data *packet = NULL;
struct ast_sip_session *session = data;
+ if (session->inv_session->state == PJSIP_INV_STATE_DISCONNECTED) {
+ ao2_ref(session, -1);
+ return 0;
+ }
+
pjsip_dlg_inc_lock(session->inv_session->dlg);
if (session->inv_session->invite_tsx) {
status = pjsip_inv_answer(session->inv_session, 200, NULL, NULL, &packet);
struct ast_sip_session *session = ind_data->session;
int response_code = ind_data->response_code;
- if (pjsip_inv_answer(session->inv_session, response_code, NULL, NULL, &packet) == PJ_SUCCESS) {
+ if ((session->inv_session->state != PJSIP_INV_STATE_DISCONNECTED) &&
+ (pjsip_inv_answer(session->inv_session, response_code, NULL, NULL, &packet) == PJ_SUCCESS)) {
ast_sip_session_send_response(session, packet);
}
if ((ast_channel_state(session->channel) != AST_STATE_UP) && (session->inv_session->role == PJSIP_UAS_ROLE)) {
int response_code = 0;
+ if (session->inv_session->state == PJSIP_INV_STATE_DISCONNECTED) {
+ return 0;
+ }
+
if (ast_channel_state(session->channel) == AST_STATE_RING) {
response_code = !session->endpoint->inband_progress ? 180 : 183;
} else if (ast_channel_state(session->channel) == AST_STATE_RINGING) {