From c4e6c49dfe3c1a9fae9ae2e605b2d6b8da94f32a Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 26 Jan 2017 16:21:09 +0100 Subject: [PATCH] fix memory leak --- coreapi/bellesip_sal/sal_op_call.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/coreapi/bellesip_sal/sal_op_call.c b/coreapi/bellesip_sal/sal_op_call.c index d0a492376..a1af4e050 100644 --- a/coreapi/bellesip_sal/sal_op_call.c +++ b/coreapi/bellesip_sal/sal_op_call.c @@ -538,6 +538,12 @@ static void sal_op_reset_descriptions(SalOp *op) { op->result=NULL; } } + +static bool_t is_a_pending_invite_incoming_transaction(belle_sip_transaction_t *tr){ + return BELLE_SIP_OBJECT_IS_INSTANCE_OF(tr, belle_sip_ist_t) && belle_sip_transaction_state_is_transient( + belle_sip_transaction_get_state(tr)); +} + static void process_request_event(void *op_base, const belle_sip_request_event_t *event) { SalOp* op = (SalOp*)op_base; belle_sip_server_transaction_t* server_transaction=NULL; @@ -711,7 +717,7 @@ static void process_request_event(void *op_base, const belle_sip_request_event_t belle_sip_server_transaction_send_response(server_transaction,resp); } else if (strcmp("CANCEL",method)==0) { belle_sip_transaction_t *last_transaction = belle_sip_dialog_get_last_transaction(op->dialog); - if (last_transaction == NULL) { + if (last_transaction == NULL || !is_a_pending_invite_incoming_transaction(last_transaction) ) { /*call leg does not exist because 200ok already sent*/ belle_sip_server_transaction_send_response(server_transaction,sal_op_create_response_from_request(op,req,481)); } else {