diff options
author | Alfred E. Heggestad <aeh@db.org> | 2016-02-14 17:54:07 +0100 |
---|---|---|
committer | Alfred E. Heggestad <aeh@db.org> | 2016-02-14 17:54:07 +0100 |
commit | 7c1aa26a289f18ce5dda6021166d7fcfedcb8911 (patch) | |
tree | 45b6bbeabafea82dd89a7b6ece981a28bef4948f | |
parent | 50a10f5cf062b7dcd3780983b035cc7ffe06778e (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.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -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); } |