diff --git a/src/evm.c b/src/evm.c index 3b15db4..882c24a 100644 --- a/src/evm.c +++ b/src/evm.c @@ -205,13 +205,14 @@ int evrsrm_recv(EV_RSR_t *evrsr_request) { itss_queue_send(facilities.tx_queue, tr_oer, enc.encoded + 1, ITSS_TRANSPORT, id, "TR.packet.btp"); itss_queue_send(facilities.tx_queue, fi_oer, enc_fdi.encoded + 1, ITSS_APPLICATIONS, id, "FI.message"); - + cleanup: log_debug("[ev] evrsrm_recv done"); return rv; } static int evrsrm_pre_reservation_response(uint8_t *evrsrm_oer, uint32_t *evrsrm_len) { + int rv = 0; EV_RSR_t *evrsr_response = calloc(1, sizeof(EV_RSR_t)); evrsr_response->header.protocolVersion = 1; evrsr_response->header.messageID = 1; @@ -236,11 +237,14 @@ static int evrsrm_pre_reservation_response(uint8_t *evrsrm_oer, uint32_t *evrsrm asn_enc_rval_t enc = uper_encode_to_buffer(&asn_DEF_EV_RSR, NULL, evrsr_response, evrsrm_oer, 512); if (enc.encoded == -1) { log_error("[ca] failed encoding evrsrm (%s)", enc.failed_type->name); - return 1; + rv = 1; + goto cleanup; } *evrsrm_len = (enc.encoded + 7) / 8; pre_reservation_id++; - return 0; +cleanup: + ASN_STRUCT_FREE(asn_DEF_EV_RSR, evrsr_response); + return rv; } int evcsnm_check(EvcsnPdu_t *evcsnm) {