@@ -661,28 +661,30 @@ static void janet_timeout_cb(JanetEVGenericMessage msg) {
661
661
662
662
#ifdef JANET_WINDOWS
663
663
static DWORD WINAPI janet_timeout_body (LPVOID ptr ) {
664
- JanetThreadedTimeout * tto = (JanetThreadedTimeout * )ptr ;
665
- SleepEx ((DWORD )(tto -> sec * 1000 ), TRUE);
666
- if (janet_fiber_can_resume (tto -> fiber )) {
667
- janet_interpreter_interrupt (tto -> vm );
664
+ JanetThreadedTimeout tto = * (JanetThreadedTimeout * )ptr ;
665
+ janet_free (ptr );
666
+ SleepEx ((DWORD )(tto .sec * 1000 ), TRUE);
667
+ if (janet_fiber_can_resume (tto .fiber )) {
668
+ janet_interpreter_interrupt (tto .vm );
668
669
JanetEVGenericMessage msg = {0 };
669
- janet_ev_post_event (tto -> vm , janet_timeout_cb , msg );
670
+ janet_ev_post_event (tto . vm , janet_timeout_cb , msg );
670
671
}
671
672
return 0 ;
672
673
}
673
674
#else
674
675
static void * janet_timeout_body (void * ptr ) {
675
- JanetThreadedTimeout * tto = (JanetThreadedTimeout * )ptr ;
676
+ JanetThreadedTimeout tto = * (JanetThreadedTimeout * )ptr ;
677
+ janet_free (ptr );
676
678
struct timespec ts ;
677
- ts .tv_sec = (time_t ) tto -> sec ;
678
- ts .tv_nsec = (tto -> sec <= UINT32_MAX )
679
- ? (long )((tto -> sec - ((uint32_t )tto -> sec )) * 1000000000 )
679
+ ts .tv_sec = (time_t ) tto . sec ;
680
+ ts .tv_nsec = (tto . sec <= UINT32_MAX )
681
+ ? (long )((tto . sec - ((uint32_t )tto . sec )) * 1000000000 )
680
682
: 0 ;
681
683
nanosleep (& ts , & ts );
682
- if (janet_fiber_can_resume (tto -> fiber )) {
683
- janet_interpreter_interrupt (tto -> vm );
684
+ if (janet_fiber_can_resume (tto . fiber )) {
685
+ janet_interpreter_interrupt (tto . vm );
684
686
JanetEVGenericMessage msg = {0 };
685
- janet_ev_post_event (tto -> vm , janet_timeout_cb , msg );
687
+ janet_ev_post_event (tto . vm , janet_timeout_cb , msg );
686
688
}
687
689
return NULL ;
688
690
}
0 commit comments