mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
945 B
38 lines
945 B
/*
|
|
* Thread support.
|
|
*/
|
|
|
|
#include "duk_internal.h"
|
|
|
|
/* FIXME: separate "executor" thread and "target" thread for DECREF?
|
|
* This function is a bit dangerous because we free the built-ins and
|
|
* DECREF. If a built-in gets DECREF'd to zero and has a finalizer,
|
|
* we might have some problems in the finalizer.
|
|
*/
|
|
|
|
void duk_hthread_terminate(duk_hthread *thr) {
|
|
int i;
|
|
|
|
duk_hthread_callstack_unwind(thr, 0); /* side effects, possibly errors */
|
|
|
|
duk_hthread_catchstack_unwind(thr, 0);
|
|
|
|
thr->valstack_bottom = thr->valstack;
|
|
duk_set_top((duk_context *) thr, 0); /* unwinds valstack, updating refcounts */
|
|
|
|
for (i = 0; i < DUK_NUM_BUILTINS; i++) {
|
|
#ifdef DUK_USE_REFERENCE_COUNTING
|
|
duk_hobject *h = thr->builtins[i];
|
|
#endif
|
|
thr->builtins[i] = NULL;
|
|
#ifdef DUK_USE_REFERENCE_COUNTING
|
|
DUK_HOBJECT_DECREF(thr, h);
|
|
#endif
|
|
}
|
|
|
|
thr->state = DUK_HTHREAD_STATE_TERMINATED;
|
|
|
|
/* FIXME: shrink to minimum size, but don't free stacks? */
|
|
}
|
|
|
|
|
|
|