One less alloc for setTimeout.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4188 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
a9551b057b
commit
1548a8a852
@ -194,13 +194,15 @@ bool tf_util_report_error(JSContext* context, JSValue value)
|
||||
}
|
||||
|
||||
typedef struct _timeout_t {
|
||||
uv_timer_t _timer;
|
||||
tf_task_t* _task;
|
||||
JSValue _callback;
|
||||
} timeout_t;
|
||||
|
||||
static void _handle_closed(uv_handle_t* handle)
|
||||
{
|
||||
tf_free(handle);
|
||||
timeout_t* timeout = handle->data;
|
||||
tf_free(timeout);
|
||||
}
|
||||
|
||||
static void _util_timeoutCallback(uv_timer_t* handle)
|
||||
@ -218,7 +220,6 @@ static void _util_timeoutCallback(uv_timer_t* handle)
|
||||
JS_FreeValue(context, result);
|
||||
JS_FreeValue(context, timeout->_callback);
|
||||
tf_trace_end(tf_task_get_trace(timeout->_task));
|
||||
tf_free(timeout);
|
||||
uv_close((uv_handle_t*)handle, _handle_closed);
|
||||
}
|
||||
|
||||
@ -231,16 +232,17 @@ static JSValue _util_setTimeout(JSContext* context, JSValueConst this_val, int a
|
||||
{
|
||||
._task = task,
|
||||
._callback = JS_DupValue(context, argv[0]),
|
||||
._timer = { .data = timeout },
|
||||
};
|
||||
|
||||
uv_timer_t* timer = tf_malloc(sizeof(uv_timer_t));
|
||||
memset(timer, 0, sizeof(uv_timer_t));
|
||||
uv_timer_init(tf_task_get_loop(task), timer);
|
||||
timer->data = timeout;
|
||||
uv_timer_init(tf_task_get_loop(task), &timeout->_timer);
|
||||
|
||||
int64_t duration;
|
||||
JS_ToInt64(context, &duration, argv[1]);
|
||||
uv_timer_start(timer, _util_timeoutCallback, duration, 0);
|
||||
if (uv_timer_start(&timeout->_timer, _util_timeoutCallback, duration, 0) != 0)
|
||||
{
|
||||
tf_free(timeout);
|
||||
}
|
||||
return JS_NULL;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user