diff --git a/src/facilities.c b/src/facilities.c index e4160cb..2f2aa10 100644 --- a/src/facilities.c +++ b/src/facilities.c @@ -38,6 +38,7 @@ static int transport_indication(facilities_t *facilities, void* responder, uint8_t *msg, uint32_t msg_len) { int rv = 0, code = 0; + bool handled_msg = false; FacilitiesDataIndication_t *fdi = NULL; BTPDataIndication_t *bdi = calloc(1, sizeof(BTPDataIndication_t)); @@ -61,14 +62,17 @@ static int transport_indication(facilities_t *facilities, void* responder, uint8 case Port_cam: its_msg_descriptor = &asn_DEF_CAM; its_msg = calloc(1, sizeof(CAM_t)); + handled_msg = true; break; case Port_denm: its_msg_descriptor = &asn_DEF_DENM; its_msg = calloc(1, sizeof(DENM_t)); + handled_msg = true; break; case Port_ivim: its_msg_descriptor = &asn_DEF_IVIM; its_msg = calloc(1, sizeof(IVIM_t)); + handled_msg = true; break; default: syslog_debug("[facilities] messsage with unhandled BTP port received, ignoring"); @@ -134,7 +138,7 @@ static int transport_indication(facilities_t *facilities, void* responder, uint8 pthread_cond_signal(&facilities->tx_queue->trigger); cleanup: - if (bdi->destinationPort != Port_denm && bdi->destinationPort != Port_ivim) { + if (handled_msg && bdi->destinationPort != Port_denm && bdi->destinationPort != Port_ivim) { ASN_STRUCT_FREE(*its_msg_descriptor, its_msg); } ASN_STRUCT_FREE(asn_DEF_BTPDataIndication, bdi);