diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2017-08-07 14:01:01 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2017-08-27 03:52:46 +0200 |
commit | ae2213e06ed26c76a91afbc04cb5b97bfb8a9f70 (patch) | |
tree | bde91a7306644d79d4af03546fb8c7b5795ecd3e /src | |
parent | 7c2fdece3981bee506c576042c1eb57fb1d66e15 (diff) |
libmsc: do not leak pending SMPP command object on error path
Make sure the SMPP command object is released on errors.
Change-Id: I474584425d23fb379a9d71b33e29ac0e24f01e61
Diffstat (limited to 'src')
-rw-r--r-- | src/libmsc/smpp_openbsc.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c index b3f9bbb4d..394827bed 100644 --- a/src/libmsc/smpp_openbsc.c +++ b/src/libmsc/smpp_openbsc.c @@ -521,7 +521,7 @@ void smpp_cmd_ack(struct osmo_smpp_cmd *cmd) conn = connection_for_subscr(cmd->vsub); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); - return; + goto out; } trans = trans_find_by_id(conn, GSM48_PDISC_SMS, @@ -529,10 +529,11 @@ void smpp_cmd_ack(struct osmo_smpp_cmd *cmd) if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", cmd->sms->gsm411.transaction_id); - return; + goto out; } gsm411_send_rp_ack(trans, cmd->sms->gsm411.msg_ref); +out: smpp_cmd_free(cmd); } @@ -545,7 +546,7 @@ void smpp_cmd_err(struct osmo_smpp_cmd *cmd, uint32_t status) conn = connection_for_subscr(cmd->vsub); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); - return; + goto out; } trans = trans_find_by_id(conn, GSM48_PDISC_SMS, @@ -553,14 +554,14 @@ void smpp_cmd_err(struct osmo_smpp_cmd *cmd, uint32_t status) if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", cmd->sms->gsm411.transaction_id); - return; + goto out; } if (smpp_to_gsm411_err(status, &gsm411_cause) < 0) gsm411_cause = GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER; gsm411_send_rp_error(trans, cmd->sms->gsm411.msg_ref, gsm411_cause); - +out: smpp_cmd_free(cmd); } |