ソースを参照

update js_util_lock

yangfasheng 7 年 前
コミット
129c1504ae
3 ファイル変更22 行追加15 行削除
  1. 1 1
      rtthread-port/jerry_buffer.c
  2. 19 14
      rtthread-port/jerry_util.c
  3. 2 0
      rtthread-port/jerry_util.h

+ 1 - 1
rtthread-port/jerry_buffer.c

@@ -339,7 +339,7 @@ DECLARE_HANDLER(toString)
         }
 
         jerry_value_t jstr;
-        jstr = jerry_create_string_sz_from_utf8((jerry_char_t *)str, end - start);
+        jstr = jerry_create_string_sz_from_utf8((jerry_char_t *)str, index - start);
         free(str);
         free(enc);
         return jstr;

+ 19 - 14
rtthread-port/jerry_util.c

@@ -3,10 +3,10 @@
 #include <stdlib.h>
 
 #include <rtthread.h>
-
+#include <dfs_posix.h>
 #include "jerry_util.h"
 
-static rt_mutex_t _call_func_lock = RT_NULL;
+static rt_mutex_t _util_lock = RT_NULL;
 
 void js_set_property(const jerry_value_t obj, const char *name,
                      const jerry_value_t prop)
@@ -73,12 +73,9 @@ jerry_value_t js_call_func_obj(const jerry_value_t func_obj_val, /**< function o
 {
     jerry_value_t ret;
 
-    if (_call_func_lock == RT_NULL)
-        return jerry_create_null();
-
-    rt_mutex_take(_call_func_lock, RT_WAITING_FOREVER);
+    js_util_lock();
     ret = jerry_call_function(func_obj_val, this_val, args_p, args_count);
-    rt_mutex_release(_call_func_lock);
+    js_util_unlock();
 
     return ret;
 }
@@ -201,7 +198,7 @@ void js_value_dump(jerry_value_t value)
         printf("what?");
     }
 }
-#include <dfs_posix.h>
+
 int js_read_file(const char* filename, char **script)
 {
     FILE *fp;
@@ -238,10 +235,12 @@ int js_read_file(const char* filename, char **script)
 extern int js_console_init();
 extern int js_module_init();
 extern int js_buffer_init();
+extern int js_buffer_cleanup();
 
 int js_util_init(void)
 {
-    _call_func_lock = rt_mutex_create("call_func", RT_IPC_FLAG_FIFO);
+    if (_util_lock == RT_NULL)
+        _util_lock = rt_mutex_create("call_func", RT_IPC_FLAG_FIFO);
 
     js_console_init();
     js_module_init();
@@ -250,13 +249,19 @@ int js_util_init(void)
     return 0;
 }
 
-extern int js_buffer_cleanup();
-
 int js_util_cleanup(void)
 {
-    rt_mutex_delete(_call_func_lock);
-    _call_func_lock = RT_NULL;
-	
     js_buffer_cleanup();
+	
     return 0;
 }
+
+int js_util_lock(void)
+{
+    return rt_mutex_take(_util_lock, RT_WAITING_FOREVER);
+}
+
+int js_util_unlock(void)
+{
+    return rt_mutex_release(_util_lock);
+}

+ 2 - 0
rtthread-port/jerry_util.h

@@ -53,6 +53,8 @@ int js_read_file(const char* filename, char **script);
 
 int js_util_init(void);
 int js_util_cleanup(void);
+int js_util_lock(void);
+int js_util_unlock(void);
 
 #ifdef __cplusplus
 }