mirror of
				https://github.com/janet-lang/janet
				synced 2025-11-04 09:33:02 +00:00 
			
		
		
		
	Address #920 - fiber cancellation can hang event loop.
The main issue was cancellation of fiber using `cancel` rather than `ev/cancel` could cause issues with the event loop internal ref count. Since this is almost certainly bad usage (and is not something I want to encourage or support), we will warn against trying to resume or error fibers that have already been suspended or scheduled on the event loop. The distinction between "task" fibers and normal fibers is now kept by a flag that is set when a fiber is resumed - if it is the outermost fiber on the stack, it is considered a root fiber. All fibers scheduled with ev/go or by the event loop are root fibers, and thus cannot be cancelled or resumed with `cancel` or `resume` - instead, use `ev/cancel` or `ev/go`.
This commit is contained in:
		@@ -58,6 +58,7 @@
 | 
			
		||||
 | 
			
		||||
#define JANET_FIBER_EV_FLAG_CANCELED 0x10000
 | 
			
		||||
#define JANET_FIBER_EV_FLAG_SUSPENDED 0x20000
 | 
			
		||||
#define JANET_FIBER_FLAG_ROOT 0x40000
 | 
			
		||||
 | 
			
		||||
#define janet_fiber_set_status(f, s) do {\
 | 
			
		||||
    (f)->flags &= ~JANET_FIBER_STATUS_MASK;\
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user