1
0
mirror of https://github.com/janet-lang/janet synced 2025-06-25 22:52:51 +00:00

Move janet_timeout_* function definitions before first use

This commit is contained in:
Michael Camilleri 2025-03-25 21:15:28 +09:00
parent 87c1eab7d4
commit 09ac85b1b9
No known key found for this signature in database
GPG Key ID: 7EB218A48DF8B572

View File

@ -630,6 +630,7 @@ void janet_addtimeout(double sec) {
to.curr_fiber = NULL; to.curr_fiber = NULL;
to.sched_id = fiber->sched_id; to.sched_id = fiber->sched_id;
to.is_error = 1; to.is_error = 1;
to.has_worker = 0;
add_timeout(to); add_timeout(to);
} }
@ -642,9 +643,53 @@ void janet_addtimeout_nil(double sec) {
to.curr_fiber = NULL; to.curr_fiber = NULL;
to.sched_id = fiber->sched_id; to.sched_id = fiber->sched_id;
to.is_error = 0; to.is_error = 0;
to.has_worker = 0;
add_timeout(to); add_timeout(to);
} }
#ifdef JANET_WINDOWS
static VOID CALLBACK janet_timeout_stop(ULONG_PTR ptr) {
UNREFERENCED_PARAMETER(ptr);
ExitThread(0);
}
#endif
static void janet_timeout_cb(JanetEVGenericMessage msg) {
(void) msg;
janet_interpreter_interrupt_handled(&janet_vm);
}
#ifdef JANET_WINDOWS
static DWORD WINAPI janet_timeout_body(LPVOID ptr) {
JanetThreadedTimeout *tto = (JanetThreadedTimeout *)ptr;
double sec = (tto->sec > 0) ? tto->sec : 0;
SleepEx((DWORD)(sec * 1000), TRUE);
if (janet_fiber_can_resume(tto->fiber)) {
janet_interpreter_interrupt(tto->vm);
JanetEVGenericMessage msg = {0};
janet_ev_post_event(tto->vm, janet_timeout_cb, msg);
}
return 0;
}
#else
static void *janet_timeout_body(void *ptr) {
JanetThreadedTimeout *tto = (JanetThreadedTimeout *)ptr;
struct timespec ts;
ts.tv_sec = (time_t) tto->sec;
ts.tv_nsec = (tto->sec <= UINT32_MAX)
? (long)((tto->sec - ((uint32_t)tto->sec)) * 1000000000)
: 0;
nanosleep(&ts, &ts);
if (janet_fiber_can_resume(tto->fiber)) {
janet_interpreter_interrupt(tto->vm);
JanetEVGenericMessage msg = {0};
janet_ev_post_event(tto->vm, janet_timeout_cb, msg);
}
return NULL;
}
#endif
void janet_ev_inc_refcount(void) { void janet_ev_inc_refcount(void) {
janet_atomic_inc(&janet_vm.listener_count); janet_atomic_inc(&janet_vm.listener_count);
} }
@ -3120,48 +3165,6 @@ JANET_CORE_FN(cfun_ev_sleep,
janet_sleep_await(sec); janet_sleep_await(sec);
} }
#ifdef JANET_WINDOWS
static VOID CALLBACK janet_timeout_stop(ULONG_PTR ptr) {
UNREFERENCED_PARAMETER(ptr);
ExitThread(0);
}
#endif
static void janet_timeout_cb(JanetEVGenericMessage msg) {
(void) msg;
janet_interpreter_interrupt_handled(&janet_vm);
}
#ifdef JANET_WINDOWS
static DWORD WINAPI janet_timeout_body(LPVOID ptr) {
JanetThreadedTimeout *tto = (JanetThreadedTimeout *)ptr;
double sec = (tto->sec > 0) ? tto->sec : 0;
SleepEx((DWORD)(tto->sec * 1000), TRUE);
if (janet_fiber_can_resume(tto->fiber)) {
janet_interpreter_interrupt(tto->vm);
JanetEVGenericMessage msg = {0};
janet_ev_post_event(tto->vm, janet_timeout_cb, msg);
}
return 0;
}
#else
static void *janet_timeout_body(void *ptr) {
JanetThreadedTimeout *tto = (JanetThreadedTimeout *)ptr;
struct timespec ts;
ts.tv_sec = (time_t) tto->sec;
ts.tv_nsec = (tto->sec <= UINT32_MAX)
? (long)((tto->sec - ((uint32_t)tto->sec)) * 1000000000)
: 0;
nanosleep(&ts, &ts);
if (janet_fiber_can_resume(tto->fiber)) {
janet_interpreter_interrupt(tto->vm);
JanetEVGenericMessage msg = {0};
janet_ev_post_event(tto->vm, janet_timeout_cb, msg);
}
return NULL;
}
#endif
JANET_CORE_FN(cfun_ev_deadline, JANET_CORE_FN(cfun_ev_deadline,
"(ev/deadline sec &opt tocancel tocheck intr?)", "(ev/deadline sec &opt tocancel tocheck intr?)",
"Schedules the event loop to try to cancel the `tocancel` task as with `ev/cancel`. " "Schedules the event loop to try to cancel the `tocancel` task as with `ev/cancel`. "