forked from cory/tildefriends
Fix one possible but not actually relevant leak around files, and remove an unused value from promises.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3857 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
41cabad264
commit
7e9460f47c
@ -125,6 +125,7 @@ static JSValue _file_read_file(JSContext* context, JSValueConst this_val, int ar
|
|||||||
if (result < 0)
|
if (result < 0)
|
||||||
{
|
{
|
||||||
tf_task_reject_promise(task, promise, JS_ThrowInternalError(context, uv_strerror(result)));
|
tf_task_reject_promise(task, promise, JS_ThrowInternalError(context, uv_strerror(result)));
|
||||||
|
free(req);
|
||||||
}
|
}
|
||||||
JS_FreeCString(context, file_name);
|
JS_FreeCString(context, file_name);
|
||||||
return promise_value;
|
return promise_value;
|
||||||
|
16
src/task.c
16
src/task.c
@ -60,7 +60,7 @@ typedef struct _promise_t promise_t;
|
|||||||
typedef struct _promise_t
|
typedef struct _promise_t
|
||||||
{
|
{
|
||||||
promiseid_t id;
|
promiseid_t id;
|
||||||
JSValue values[3];
|
JSValue values[2];
|
||||||
} promise_t;
|
} promise_t;
|
||||||
|
|
||||||
typedef struct _tf_task_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 =
|
promise_t promise =
|
||||||
{
|
{
|
||||||
.id = promiseId,
|
.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);
|
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));
|
task->_promises = realloc(task->_promises, sizeof(promise_t) * (task->_promise_count + 1));
|
||||||
if (task->_promise_count - index)
|
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->_promises[index] = promise;
|
||||||
task->_promise_count++;
|
task->_promise_count++;
|
||||||
*out_promise = promiseId;
|
*out_promise = promiseId;
|
||||||
return promise.values[0];
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tf_task_resolve_promise(tf_task_t* task, promiseid_t promise, JSValue value)
|
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);
|
promise_t* it = _tf_task_find_promise(task, promise);
|
||||||
if (it)
|
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);
|
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[1]);
|
||||||
JS_FreeValue(task->_context, it->values[2]);
|
|
||||||
JS_FreeValue(task->_context, result);
|
JS_FreeValue(task->_context, result);
|
||||||
_tf_task_free_promise(task, promise);
|
_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);
|
arg = JS_GetException(task->_context);
|
||||||
free_arg = true;
|
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)
|
if (free_arg)
|
||||||
{
|
{
|
||||||
JS_FreeValue(task->_context, arg);
|
JS_FreeValue(task->_context, arg);
|
||||||
}
|
}
|
||||||
tf_util_report_error(task->_context, result);
|
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[1]);
|
||||||
JS_FreeValue(task->_context, it->values[2]);
|
|
||||||
JS_FreeValue(task->_context, result);
|
JS_FreeValue(task->_context, result);
|
||||||
_tf_task_free_promise(task, promise);
|
_tf_task_free_promise(task, promise);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user