Index: channels/chan_pjsip.c
===================================================================
--- channels/chan_pjsip.c	(revision 428194)
+++ channels/chan_pjsip.c	(working copy)
@@ -467,6 +467,11 @@
 	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);
@@ -966,7 +971,8 @@
 	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);
 	}
 
@@ -1018,6 +1024,10 @@
 	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) {
