Expand scope of code that works with ev/deadline
again
#1575
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR carries on from #1566. The background, implementation and limitations are largely the same as set out in that PR.
The key difference is that the background thread is now sent to sleep for the amount of the timeout (previously, the thread used
sleep(0)
). To avoid a scenario where the fiber being monitored has finished running but the background thread remains asleep (which would prevent the process from terminating), the thread is now cancelled. This is achieved on POSIX by usingnanosleep
(which creates a 'cancellation point' forpthread_cancel
) and on Windows by usingSleepEx
(which permits an asynchronous procedure call to be made usingQueueUserAPC
).A test is also added to demonstrate usage.
Note
The
JanetTimeout
struct is only used when theJANET_EV
macro is defined but was always being declared instate.h
. This PR puts the declaration inside a preprocessor directive. This is similar to how<pthread.h>
is only included if theJANET_EV
macro is defined.