summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfred E. Heggestad <aeh@db.org>2016-02-14 17:54:07 +0100
committerAlfred E. Heggestad <aeh@db.org>2016-02-14 17:54:07 +0100
commit7c1aa26a289f18ce5dda6021166d7fcfedcb8911 (patch)
tree45b6bbeabafea82dd89a7b6ece981a28bef4948f
parent50a10f5cf062b7dcd3780983b035cc7ffe06778e (diff)
call: move CALL_EVENT_ESTABLISHED to the end
- since the callback handler might destroy the call object, it is safer to call the handler as the last thing in the function. otherwise the call object might be corrupt, i.e. pointing to deallocated memory.
-rw-r--r--src/call.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/call.c b/src/call.c
index 1ddb42f..dda9f3a 100644
--- a/src/call.c
+++ b/src/call.c
@@ -1028,14 +1028,15 @@ static void sipsess_estab_handler(const struct sip_msg *msg, void *arg)
set_state(call, STATE_ESTABLISHED);
- call_event_handler(call, CALL_EVENT_ESTABLISHED, call->peer_uri);
-
call_stream_start(call, true);
/* the transferor will hangup this call */
if (call->not) {
(void)call_notify_sipfrag(call, 200, "OK");
}
+
+ /* must be done last, the handler might deref this call */
+ call_event_handler(call, CALL_EVENT_ESTABLISHED, call->peer_uri);
}