aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libmsc/gsm_04_11.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index cc9ce18f1..c5c30367c 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -216,22 +216,20 @@ static int gsm411_mm_send(struct gsm411_smc_inst *inst, int msg_type,
switch (msg_type) {
case GSM411_MMSMS_EST_REQ:
rc = gsm411_mmsms_est_req(trans);
- msgb_free(msg); /* upper layer does not free msg */
break;
case GSM411_MMSMS_DATA_REQ:
rc = gsm411_cp_sendmsg(msg, trans, cp_msg_type);
- break;
+ return rc; /* gsm411_cp_sendmsg() takes msg ownership */
case GSM411_MMSMS_REL_REQ:
LOG_TRANS(trans, LOGL_DEBUG, "Got MMSMS_REL_REQ, destroying transaction.\n");
- msgb_free(msg);
trans_free(trans);
break;
default:
LOG_TRANS(trans, LOGL_NOTICE, "Unhandled MMCCSMS msg 0x%x\n", msg_type);
- msgb_free(msg);
rc = -EINVAL;
}
+ msgb_free(msg);
return rc;
}