Fix: double free issue
[apps/agl-service-can-low-level.git] / low-can-binding / diagnostic / diagnostic-manager.cpp
index bc335df..ba4b0c8 100644 (file)
@@ -102,27 +102,26 @@ bool diagnostic_manager_t::shims_send(const uint32_t arbitration_id, const uint8
 
        // Make sure that socket has been opened.
        if(! tx_socket)
-               tx_socket.open(
-                       dm.get_bus_device_name());
+               tx_socket.open(dm.get_bus_device_name());
 
-       struct utils::simple_bcm_msg bcm_msg;
-       struct can_frame cfd;
-
-       memset(&cfd, 0, sizeof(cfd));
-       memset(&bcm_msg.msg_head, 0, sizeof(bcm_msg.msg_head));
+       struct utils::bcm_msg bcm_msg;
+       struct can_frame cf;
 
        struct timeval freq = current_adr->get_frequency_clock().get_timeval_from_period();
 
        bcm_msg.msg_head.opcode  = TX_SETUP;
        bcm_msg.msg_head.can_id  = arbitration_id;
        bcm_msg.msg_head.flags = SETTIMER|STARTTIMER|TX_CP_CAN_ID;
+       bcm_msg.msg_head.count = 0;
        bcm_msg.msg_head.ival2.tv_sec = freq.tv_sec;
        bcm_msg.msg_head.ival2.tv_usec = freq.tv_usec;
        bcm_msg.msg_head.nframes = 1;
-       cfd.can_dlc = size;
-       ::memcpy(cfd.data, data, size);
+       cf.can_dlc = size;
+
+       ::memset(cf.data, 0, sizeof(cf.data));
+       ::memcpy(cf.data, data, size);
 
-       bcm_msg.frames = cfd;
+       bcm_msg.frames[0] = cf;
 
        tx_socket << bcm_msg;
        if(tx_socket)
@@ -257,7 +256,7 @@ active_diagnostic_request_t* diagnostic_manager_t::find_recurring_request(Diagno
        }
        return nullptr;
 }
-
+/*
 /// @brief Add and send a new one-time diagnostic request. DON'T USED AT THIS TIME
 ///
 /// A one-time (aka non-recurring) request can existing in parallel with a
@@ -314,7 +313,7 @@ active_diagnostic_request_t* diagnostic_manager_t::add_request(DiagnosticRequest
        }
        return entry;
 }
-
+*/
 /// @brief Validate frequency asked don't get higher than the maximum of a classical
 /// CAN bus OBD2 request.
 ///