Просмотр исходного кода

Merge pull request #47 from yangfasheng/master

修复 message 功能内存泄漏问题
yangfasheng 7 лет назад
Родитель
Сommit
7844cd1cff
3 измененных файлов с 8 добавлено и 8 удалено
  1. 3 1
      rtthread-port/jerry_buffer.c
  2. 1 6
      rtthread-port/jerry_callbacks.c
  3. 4 1
      rtthread-port/jerry_message.c

+ 3 - 1
rtthread-port/jerry_buffer.c

@@ -805,7 +805,9 @@ jerry_value_t jerry_buffer_create(uint32_t size, js_buffer_t **ret_buf)
     buf_item->bufsize = size;
 
     jerry_set_prototype(buf_obj, jerry_buffer_prototype);
-    js_set_property(buf_obj, "length", jerry_create_number(size));
+    jerry_value_t length = jerry_create_number(size);
+    js_set_property(buf_obj, "length", length);
+    jerry_release_value(length);
 
     // watch for the object getting garbage collected, and clean up
     jerry_set_object_native_pointer(buf_obj, buf_item, &buffer_type_info);

+ 1 - 6
rtthread-port/jerry_callbacks.c

@@ -128,11 +128,7 @@ rt_bool_t js_send_callback(struct js_callback *callback, const void *args, uint3
     if (jmc)
     {
         jmc->callback = callback;
-        jmc->args = rt_malloc(size);
-        if (jmc->args && args)
-        {
-            memcpy(jmc->args, args, size);
-        }
+        jmc->args = (void *)args;
         jmc->size = size;
 
         if (_js_mq_func)
@@ -142,7 +138,6 @@ rt_bool_t js_send_callback(struct js_callback *callback, const void *args, uint3
 
         if (ret == RT_FALSE)
         {
-            rt_free(jmc->args);
             rt_free(jmc);
         }
     }

+ 4 - 1
rtthread-port/jerry_message.c

@@ -36,8 +36,11 @@ rt_bool_t js_message_send(const char *name, rt_uint8_t *data, rt_uint32_t size)
                 rt_memcpy(msg->data, data, size);
                 ret = js_send_callback(js_message_cb, msg, sizeof(struct js_message));
             }
-            else
+
+            if (!ret)
             {
+                rt_free(msg->data);
+                rt_free(msg->name);
                 rt_free(msg);
             }
         }