修复消息内存泄漏
authorSnickerSun <snickersun@163.com>
Tue, 9 Jul 2024 12:17:49 +0000 (20:17 +0800)
committerSnickerSun <snickersun@163.com>
Tue, 9 Jul 2024 12:17:49 +0000 (20:17 +0800)
code/sdk/application/battery/service/battery_service.cpp
code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp
code/sdk/drivers/peripheral/utilscpp/custom_utilscpp.cpp
code/sdk/middleware/services/gui/uikit/proprietary/src/utils/frameworks/hals/lite_input_distributer.cpp

index 11c89da..33b8221 100644 (file)
@@ -381,41 +381,24 @@ void ChargerEventPublish(uint16_t topic, uint32_t data)
 {
     int32 ret;
     uint32 size = sizeof(uint32_t);
-    Request *request = NULL;
     BroadcastApi *broadcastApi = NULL;
     IUnknown *api = NULL;
 
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish topic=%u!!", topic);
-
-    /* alloc request */
-    request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);
-    if (request == NULL) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");
-        return;
-    }
-    request->msgId = topic;
-    ret = memcpy_s(request->data, size, (const void *)&data, size);
-    if (ret != EOK) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);
-        return;
-    }
-    request->len = size;
-    request->msgValue = 0;
-
+    
+    Request request = {.msgId = topic, .len = size, .msgValue = 0 , .data = nullptr};
     /* public request */
     api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);
-    if (api == NULL) {
+    if (api == nullptr) {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");
-        SAMGR_FreeRequestMsg(request);
         return;
     }
     ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);
-    if (ret != 0 || broadcastApi == NULL) {
+    if (ret != 0 || broadcastApi == nullptr) {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");
-        SAMGR_FreeRequestMsg(request);
         return;
     }
-    broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);
+    broadcastApi->PublishTopic((IUnknown *)broadcastApi, &request);
     broadcastApi->Release((IUnknown *)broadcastApi);
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish end!!");
 
index 5754880..7c3b4e7 100644 (file)
@@ -129,48 +129,45 @@ extern "C"
     {\r
         int32 ret;\r
 \r
-        Request *request = NULL;\r
         BroadcastApi *broadcastApi = NULL;\r
         IUnknown *api = NULL;\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish topic=%u!!", topic);\r
 \r
-        /* alloc request */\r
-        request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);\r
-        if (request == NULL)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");\r
-            return;\r
-        }\r
-        request->msgId = topic;\r
+       \r
+        void *publishData = nullptr;\r
         if (size > 0)\r
         {\r
-            ret = memcpy_s(request->data, size, (const void *)data, size);\r
+            publishData = malloc(size);\r
+            if (publishData == nullptr) {\r
+                return;\r
+            }\r
+            ret = memcpy_s(publishData, size, (const void *)data, size);\r
             if (ret != EOK)\r
             {\r
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);\r
+                free(publishData);\r
                 return;\r
             }\r
         }\r
-\r
-        request->len = size;\r
-        request->msgValue = 0;\r
-\r
+  \r
+        Request request = {.msgId = topic, .len = size, .msgValue = 0,.data = publishData};\r
+        \r
         /* public request */\r
         api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);\r
         if (api == NULL)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");\r
-            SAMGR_FreeRequestMsg(request);\r
+            free(publishData);\r
             return;\r
         }\r
         ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);\r
         if (ret != 0 || broadcastApi == NULL)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");\r
-            SAMGR_FreeRequestMsg(request);\r
+            free(publishData);\r
             return;\r
         }\r
-        broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);\r
+        broadcastApi->PublishTopic((IUnknown *)broadcastApi, &request);\r
         broadcastApi->Release((IUnknown *)broadcastApi);\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish end!!");\r
 \r
@@ -180,45 +177,46 @@ extern "C"
     {\r
         int32 ret;\r
         uint32 size = sizeof(AlarmClockEventData);\r
-        Request *request = nullptr;\r
         BroadcastApi *broadcastApi = nullptr;\r
         IUnknown *api = nullptr;\r
 \r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish topic=%u!!", topic);\r
 \r
-        /* alloc request */\r
-        request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);\r
-        if (request == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");\r
-            return;\r
-        }\r
-        request->msgId = topic;\r
-        ret = memcpy_s(request->data, size, (const void *)&data, size);\r
-        if (ret != EOK)\r
+\r
+        void *publishData = nullptr;\r
+        if (size > 0)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);\r
-            return;\r
+            publishData = malloc(size);\r
+            if (publishData == nullptr) {\r
+                return;\r
+            }\r
+            ret = memcpy_s(publishData, size, (const void *)&data, size);\r
+            if (ret != EOK)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);\r
+                free(publishData);\r
+                return;\r
+            }\r
         }\r
-        request->len = size;\r
-        request->msgValue = 0;\r
-\r
+  \r
+        Request request = {.msgId = topic, .len = size, .msgValue = 0,.data = publishData};\r
+        \r
         /* public request */\r
         api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);\r
         if (api == nullptr)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");\r
-            SAMGR_FreeRequestMsg(request);\r
+            free(publishData);\r
             return;\r
         }\r
         ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);\r
         if (ret != 0 || broadcastApi == nullptr)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");\r
-            SAMGR_FreeRequestMsg(request);\r
+            free(publishData);\r
             return;\r
         }\r
-        broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);\r
+        broadcastApi->PublishTopic((IUnknown *)broadcastApi, &request);\r
         broadcastApi->Release((IUnknown *)broadcastApi);\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish end!!");\r
 \r
index 4f33322..61bc663 100644 (file)
@@ -253,44 +253,44 @@ void CustomEventPublish(uint16_t topic, uint8_t *data , uint32_t size)
 {
     int32_t ret;
     
-    Request *request = NULL;
     BroadcastApi *broadcastApi = NULL;
     IUnknown *api = NULL;
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish topic=%u!!", topic);
 
-    /* alloc request */
-    request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);
-    if (request == NULL) {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");
-        return;
-    }
-    request->msgId = topic;
+
+    void *publishData = nullptr;
     if (size > 0)
     {
-        ret = memcpy_s(request->data, size, (const void *)data, size);
-        if (ret != EOK) {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);
+        publishData = malloc(size);
+        if (publishData == nullptr) {
+            return;
+        }
+        ret = memcpy_s(publishData, size, (const void *)data, size);
+        if (ret != EOK)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);
+            free(publishData);
             return;
         }
     }
+
+    Request request = {.msgId = topic, .len = size, .msgValue = 0,.data = publishData};
     
-    request->len = size;
-    request->msgValue = 0;
 
     /* public request */
     api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);
     if (api == NULL) {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");
-        SAMGR_FreeRequestMsg(request);
+        free(publishData);
         return;
     }
     ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);
     if (ret != 0 || broadcastApi == NULL) {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");
-        SAMGR_FreeRequestMsg(request);
+        free(publishData);
         return;
     }
-    broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);
+    broadcastApi->PublishTopic((IUnknown *)broadcastApi, &request);
     broadcastApi->Release((IUnknown *)broadcastApi);
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish end!!");
 
index ea24964..157e76d 100755 (executable)
@@ -170,22 +170,18 @@ void LiteInputDistributer::SendEventToPM(const RawEvent& event)
         userEvent = USER_EVENT_KEY;
     }
     uint32_t msgValue = (POWER_DISPLAY_POLICY << EVENT_TYPE_BITS_SIZE) | userEvent;
-
-    Request *request = nullptr;
-    request = SAMGR_AllocRequestMsg(0, CORES_APPLICATION_CORE, POWER_SVR_ID, 0);
-    if (request == nullptr) {
-        return;
+  
+    Request request = {
+        .serviceId = UI_SVR_ID,
+        .msgId = msgId,
+        .msgValue = msgValue,
+        .data = nullptr;
     }
-    request->serviceId = UI_SVR_ID;
-    request->msgId = msgId;
-    request->msgValue = msgValue;
-
     CommuFeature *feature = GET_OBJECT(api, CommuFeature, iUnknown);
     Identity identity = feature->id;
     identity.featureId = -1;
-    int32 ret = SAMGR_SendRequest(&identity, request, nullptr);
+    int32 ret = SAMGR_SendRequest(&identity, &request, nullptr);
     if (ret != 0) {
-        SAMGR_FreeRequestMsg(request);
         return;
     }
 }