mirror of
https://github.com/janet-lang/janet
synced 2025-06-05 16:14:12 +00:00
Avoid leaking memory used for JanetThreadedTimeout struct
This commit is contained in:
parent
a24e5b1eaa
commit
eac37ab869
@ -661,28 +661,30 @@ static void janet_timeout_cb(JanetEVGenericMessage msg) {
|
|||||||
|
|
||||||
#ifdef JANET_WINDOWS
|
#ifdef JANET_WINDOWS
|
||||||
static DWORD WINAPI janet_timeout_body(LPVOID ptr) {
|
static DWORD WINAPI janet_timeout_body(LPVOID ptr) {
|
||||||
JanetThreadedTimeout *tto = (JanetThreadedTimeout *)ptr;
|
JanetThreadedTimeout tto = *(JanetThreadedTimeout *)ptr;
|
||||||
SleepEx((DWORD)(tto->sec * 1000), TRUE);
|
janet_free(ptr);
|
||||||
if (janet_fiber_can_resume(tto->fiber)) {
|
SleepEx((DWORD)(tto.sec * 1000), TRUE);
|
||||||
janet_interpreter_interrupt(tto->vm);
|
if (janet_fiber_can_resume(tto.fiber)) {
|
||||||
|
janet_interpreter_interrupt(tto.vm);
|
||||||
JanetEVGenericMessage msg = {0};
|
JanetEVGenericMessage msg = {0};
|
||||||
janet_ev_post_event(tto->vm, janet_timeout_cb, msg);
|
janet_ev_post_event(tto.vm, janet_timeout_cb, msg);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static void *janet_timeout_body(void *ptr) {
|
static void *janet_timeout_body(void *ptr) {
|
||||||
JanetThreadedTimeout *tto = (JanetThreadedTimeout *)ptr;
|
JanetThreadedTimeout tto = *(JanetThreadedTimeout *)ptr;
|
||||||
|
janet_free(ptr);
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
ts.tv_sec = (time_t) tto->sec;
|
ts.tv_sec = (time_t) tto.sec;
|
||||||
ts.tv_nsec = (tto->sec <= UINT32_MAX)
|
ts.tv_nsec = (tto.sec <= UINT32_MAX)
|
||||||
? (long)((tto->sec - ((uint32_t)tto->sec)) * 1000000000)
|
? (long)((tto.sec - ((uint32_t)tto.sec)) * 1000000000)
|
||||||
: 0;
|
: 0;
|
||||||
nanosleep(&ts, &ts);
|
nanosleep(&ts, &ts);
|
||||||
if (janet_fiber_can_resume(tto->fiber)) {
|
if (janet_fiber_can_resume(tto.fiber)) {
|
||||||
janet_interpreter_interrupt(tto->vm);
|
janet_interpreter_interrupt(tto.vm);
|
||||||
JanetEVGenericMessage msg = {0};
|
JanetEVGenericMessage msg = {0};
|
||||||
janet_ev_post_event(tto->vm, janet_timeout_cb, msg);
|
janet_ev_post_event(tto.vm, janet_timeout_cb, msg);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user