diff --git a/src/file.js.c b/src/file.js.c index ed8a6c45..1527d246 100644 --- a/src/file.js.c +++ b/src/file.js.c @@ -125,6 +125,7 @@ static JSValue _file_read_file(JSContext* context, JSValueConst this_val, int ar if (result < 0) { tf_task_reject_promise(task, promise, JS_ThrowInternalError(context, uv_strerror(result))); + free(req); } JS_FreeCString(context, file_name); return promise_value; diff --git a/src/task.c b/src/task.c index 8081b21a..139d3693 100644 --- a/src/task.c +++ b/src/task.c @@ -60,7 +60,7 @@ typedef struct _promise_t promise_t; typedef struct _promise_t { promiseid_t id; - JSValue values[3]; + JSValue values[2]; } promise_t; typedef struct _tf_task_t @@ -1181,9 +1181,9 @@ JSValue tf_task_allocate_promise(tf_task_t* task, promiseid_t* out_promise) promise_t promise = { .id = promiseId, - .values = { JS_NULL, JS_NULL, JS_NULL }, + .values = { JS_NULL, JS_NULL }, }; - promise.values[0] = JS_NewPromiseCapability(task->_context, &promise.values[1]); + JSValue result = JS_NewPromiseCapability(task->_context, promise.values); int index = _insert_index((void*)(intptr_t)promiseId, task->_promises, task->_promise_count, sizeof(promise_t), _promise_compare); task->_promises = realloc(task->_promises, sizeof(promise_t) * (task->_promise_count + 1)); if (task->_promise_count - index) @@ -1193,7 +1193,7 @@ JSValue tf_task_allocate_promise(tf_task_t* task, promiseid_t* out_promise) task->_promises[index] = promise; task->_promise_count++; *out_promise = promiseId; - return promise.values[0]; + return result; } void tf_task_resolve_promise(tf_task_t* task, promiseid_t promise, JSValue value) @@ -1201,10 +1201,10 @@ void tf_task_resolve_promise(tf_task_t* task, promiseid_t promise, JSValue value promise_t* it = _tf_task_find_promise(task, promise); if (it) { - JSValue result = JS_Call(task->_context, it->values[1], JS_UNDEFINED, 1, &value); + JSValue result = JS_Call(task->_context, it->values[0], JS_UNDEFINED, 1, &value); tf_util_report_error(task->_context, result); + JS_FreeValue(task->_context, it->values[0]); JS_FreeValue(task->_context, it->values[1]); - JS_FreeValue(task->_context, it->values[2]); JS_FreeValue(task->_context, result); _tf_task_free_promise(task, promise); } @@ -1227,14 +1227,14 @@ void tf_task_reject_promise(tf_task_t* task, promiseid_t promise, JSValue value) arg = JS_GetException(task->_context); free_arg = true; } - JSValue result = JS_Call(task->_context, it->values[2], JS_UNDEFINED, 1, &arg); + JSValue result = JS_Call(task->_context, it->values[1], JS_UNDEFINED, 1, &arg); if (free_arg) { JS_FreeValue(task->_context, arg); } tf_util_report_error(task->_context, result); + JS_FreeValue(task->_context, it->values[0]); JS_FreeValue(task->_context, it->values[1]); - JS_FreeValue(task->_context, it->values[2]); JS_FreeValue(task->_context, result); _tf_task_free_promise(task, promise); }