@@ -54,10 +54,7 @@ extern yafl_transfer_t jump_fcontext(yafl_t const to, void *vp);
5454#define FCONTEXT_STACK_WATERMARK 0xA5
5555#define FCONTEXT_STACK_ALIGNMENT 16
5656
57- typedef enum {
58- FCONTEXT_ALLOC_MALLOC ,
59- FCONTEXT_ALLOC_VMEM
60- } yafl_alloc_type_t ;
57+ typedef enum { FCONTEXT_ALLOC_MALLOC , FCONTEXT_ALLOC_VMEM } yafl_alloc_type_t ;
6158
6259/* Internal fiber structure */
6360struct yafl_fiber {
@@ -73,13 +70,13 @@ struct yafl_fiber {
7370 bool watermark_filled ;
7471
7572 /* Context tracking */
76- yafl_t context ; /* Fiber's saved context */
77- yafl_t resumer_context ; /* Context to return to */
73+ yafl_t context ; /* Fiber's saved context */
74+ yafl_t resumer_context ; /* Context to return to */
7875
7976 /* User entry and result */
8077 yafl_fiber_fn user_entry ;
8178 void * cached_result ;
82- void * pending_arg ; /* Argument for next resume */
79+ void * pending_arg ; /* Argument for next resume */
8380};
8481
8582/* Typedef for internal use */
@@ -99,16 +96,14 @@ static size_t get_page_size(void) {
9996 return (size_t )si .dwPageSize ;
10097#else
10198 long page_size = sysconf (_SC_PAGE_SIZE );
102- if (page_size <= 0 ) {
103- return 4096 ;
104- }
99+ if (page_size <= 0 ) { return 4096 ; }
105100 return (size_t )page_size ;
106101#endif
107102}
108103
109104static void * align_stack_pointer (void * ptr ) {
110105 uintptr_t addr = (uintptr_t )ptr ;
111- return (void * )(addr & ~(FCONTEXT_STACK_ALIGNMENT - 1 ));
106+ return (void * )(addr & ~(( uintptr_t ) FCONTEXT_STACK_ALIGNMENT - 1 ));
112107}
113108
114109/* ========================================================================
@@ -147,27 +142,20 @@ static void fiber_entry_trampoline(yafl_transfer_t t) {
147142 * Fiber Creation
148143 * ======================================================================== */
149144
150- extern yafl_fiber_t * yafl_fiber_create (yafl_fiber_fn fiber_fn , size_t stack_size ,
151- yafl_stack_flags_t flags ) {
145+ extern yafl_fiber_t * yafl_fiber_create (yafl_fiber_fn fiber_fn , size_t stack_size , yafl_stack_flags_t flags ) {
152146 /* Validate fiber function is not NULL */
153- if (fiber_fn == NULL ) {
154- return NULL ;
155- }
147+ if (fiber_fn == NULL ) { return NULL ; }
156148
157149 /* Validate exactly one allocation type is set */
158150 int alloc_flags = flags & (YAFL_STACK_FLAGS_MALLOC | YAFL_STACK_FLAGS_VMEM );
159- if (alloc_flags != YAFL_STACK_FLAGS_MALLOC && alloc_flags != YAFL_STACK_FLAGS_VMEM ) {
160- return NULL ;
161- }
151+ if (alloc_flags != YAFL_STACK_FLAGS_MALLOC && alloc_flags != YAFL_STACK_FLAGS_VMEM ) { return NULL ; }
162152
163153 bool use_vmem = (flags & YAFL_STACK_FLAGS_VMEM ) != 0 ;
164154 bool use_watermark = (flags & YAFL_STACK_FLAGS_WATERMARK ) != 0 ;
165155
166156 /* Allocate fiber structure */
167157 yafl_fiber_t * fiber = malloc (sizeof (yafl_fiber_t ));
168- if (fiber == NULL ) {
169- return NULL ;
170- }
158+ if (fiber == NULL ) { return NULL ; }
171159
172160 /* Initialize fiber structure */
173161 fiber -> magic = FCONTEXT_FIBER_MAGIC ;
@@ -181,12 +169,10 @@ extern yafl_fiber_t *yafl_fiber_create(yafl_fiber_fn fiber_fn, size_t stack_size
181169 fiber -> resumer_context = NULL ;
182170
183171 /* Use default stack size if not specified */
184- if (stack_size == 0 ) {
185- stack_size = FCONTEXT_DEFAULT_STACK_SIZE ;
186- }
172+ if (stack_size == 0 ) { stack_size = FCONTEXT_DEFAULT_STACK_SIZE ; }
187173
188174 /* Allocate stack based on allocation type */
189- if (use_vmem ) {
175+ if (use_vmem ) {
190176 size_t page_size = get_page_size ();
191177 size_t stack_with_overhead = stack_size + 256 ;
192178 size_t aligned_stack_size = ((stack_with_overhead + page_size - 1 ) / page_size ) * page_size ;
@@ -196,28 +182,28 @@ extern yafl_fiber_t *yafl_fiber_create(yafl_fiber_fn fiber_fn, size_t stack_size
196182 void * region = NULL ;
197183#ifdef _WIN32
198184 region = VirtualAlloc (NULL , total_size , MEM_RESERVE , PAGE_NOACCESS );
199- if (region == NULL ) {
185+ if (region == NULL ) {
200186 free (fiber );
201187 return NULL ;
202188 }
203189 void * stack_base = (char * )region + guard_size ;
204- if (!VirtualAlloc (stack_base , aligned_stack_size , MEM_COMMIT , PAGE_READWRITE )) {
190+ if (!VirtualAlloc (stack_base , aligned_stack_size , MEM_COMMIT , PAGE_READWRITE )) {
205191 VirtualFree (region , 0 , MEM_RELEASE );
206192 free (fiber );
207193 return NULL ;
208194 }
209195#else
210196 region = mmap (NULL , total_size , PROT_READ | PROT_WRITE , MAP_PRIVATE | MAP_ANONYMOUS , -1 , 0 );
211- if (region == MAP_FAILED ) {
197+ if (region == MAP_FAILED ) {
212198 free (fiber );
213199 return NULL ;
214200 }
215- if (mprotect (region , guard_size , PROT_NONE ) == -1 ) {
201+ if (mprotect (region , guard_size , PROT_NONE ) == -1 ) {
216202 munmap (region , total_size );
217203 free (fiber );
218204 return NULL ;
219205 }
220- if (mprotect ((char * )region + guard_size + aligned_stack_size , guard_size , PROT_NONE ) == -1 ) {
206+ if (mprotect ((char * )region + guard_size + aligned_stack_size , guard_size , PROT_NONE ) == -1 ) {
221207 munmap (region , total_size );
222208 free (fiber );
223209 return NULL ;
@@ -228,7 +214,7 @@ extern yafl_fiber_t *yafl_fiber_create(yafl_fiber_fn fiber_fn, size_t stack_size
228214 void * stack_region_end = (char * )stack_base + aligned_stack_size ;
229215 void * stack_top = (char * )stack_region_end - 256 ;
230216 stack_top = align_stack_pointer (stack_top );
231- size_t actual_stack_size = (char * )stack_top - (char * )stack_base ;
217+ size_t actual_stack_size = (uintptr_t )( intptr_t )(( char * )stack_top - (char * )stack_base ) ;
232218
233219 fiber -> stack_region = region ;
234220 fiber -> stack_total_size = total_size ;
@@ -238,7 +224,7 @@ extern yafl_fiber_t *yafl_fiber_create(yafl_fiber_fn fiber_fn, size_t stack_size
238224 /* malloc allocation */
239225 size_t allocated_size = stack_size + 256 ;
240226 void * block = malloc (allocated_size );
241- if (block == NULL ) {
227+ if (block == NULL ) {
242228 free (fiber );
243229 return NULL ;
244230 }
@@ -247,7 +233,7 @@ extern yafl_fiber_t *yafl_fiber_create(yafl_fiber_fn fiber_fn, size_t stack_size
247233 void * stack_top = (char * )block_end - 256 ;
248234 stack_top = align_stack_pointer (stack_top );
249235
250- size_t actual_stack_size = (char * )stack_top - (char * )block ;
236+ size_t actual_stack_size = (uintptr_t )( intptr_t )(( char * )stack_top - (char * )block ) ;
251237
252238 fiber -> stack_region = block ;
253239 fiber -> stack_total_size = allocated_size ;
@@ -257,8 +243,8 @@ extern yafl_fiber_t *yafl_fiber_create(yafl_fiber_fn fiber_fn, size_t stack_size
257243
258244 /* Initialize the low-level context with trampoline as entry */
259245 fiber -> context = make_fcontext (fiber -> stack_top , fiber -> stack_size , fiber_entry_trampoline );
260- if (fiber -> context == NULL ) {
261- if (use_vmem ) {
246+ if (fiber -> context == NULL ) {
247+ if (use_vmem ) {
262248#ifdef _WIN32
263249 VirtualFree (fiber -> stack_region , 0 , MEM_RELEASE );
264250#else
@@ -272,12 +258,12 @@ extern yafl_fiber_t *yafl_fiber_create(yafl_fiber_fn fiber_fn, size_t stack_size
272258 }
273259
274260 /* Apply watermark if requested */
275- if (use_watermark ) {
261+ if (use_watermark ) {
276262 memset ((char * )fiber -> stack_top - fiber -> stack_size , FCONTEXT_STACK_WATERMARK , fiber -> stack_size );
277263 /* Reinitialize context after watermark (overwrites filled area) */
278264 fiber -> context = make_fcontext (fiber -> stack_top , fiber -> stack_size , fiber_entry_trampoline );
279- if (fiber -> context == NULL ) {
280- if (use_vmem ) {
265+ if (fiber -> context == NULL ) {
266+ if (use_vmem ) {
281267#ifdef _WIN32
282268 VirtualFree (fiber -> stack_region , 0 , MEM_RELEASE );
283269#else
@@ -300,19 +286,13 @@ extern yafl_fiber_t *yafl_fiber_create(yafl_fiber_fn fiber_fn, size_t stack_size
300286
301287extern void * yafl_fiber_resume (yafl_fiber_t * fiber , void * arg ) {
302288 /* Validation */
303- if (fiber == NULL || fiber -> magic != FCONTEXT_FIBER_MAGIC ) {
304- return NULL ;
305- }
289+ if (fiber == NULL || fiber -> magic != FCONTEXT_FIBER_MAGIC ) { return NULL ; }
306290
307291 /* If complete, return cached result (idempotent) */
308- if (fiber -> status == YAFL_FIBER_STATUS_COMPLETE ) {
309- return fiber -> cached_result ;
310- }
292+ if (fiber -> status == YAFL_FIBER_STATUS_COMPLETE ) { return fiber -> cached_result ; }
311293
312294 /* Cannot resume running fiber */
313- if (fiber -> status == YAFL_FIBER_STATUS_RUNNING ) {
314- return NULL ;
315- }
295+ if (fiber -> status == YAFL_FIBER_STATUS_RUNNING ) { return NULL ; }
316296
317297 /* Store argument for delivery */
318298 fiber -> pending_arg = arg ;
@@ -338,9 +318,7 @@ extern void *yafl_fiber_suspend(void *result) {
338318 yafl_fiber_t * current = tls_current_fiber ;
339319
340320 /* Must be in a fiber */
341- if (current == NULL ) {
342- return NULL ;
343- }
321+ if (current == NULL ) { return NULL ; }
344322
345323 /* Update status */
346324 current -> status = YAFL_FIBER_STATUS_SUSPENDED ;
@@ -362,24 +340,18 @@ extern void *yafl_fiber_suspend(void *result) {
362340 * ======================================================================== */
363341
364342extern yafl_fiber_status_t yafl_fiber_status (yafl_fiber_t * fiber ) {
365- if (fiber == NULL || fiber -> magic != FCONTEXT_FIBER_MAGIC ) {
366- return YAFL_FIBER_STATUS_ERR ;
367- }
343+ if (fiber == NULL || fiber -> magic != FCONTEXT_FIBER_MAGIC ) { return YAFL_FIBER_STATUS_ERR ; }
368344 return fiber -> status ;
369345}
370346
371347extern size_t yafl_fiber_stack_high_watermark (yafl_fiber_t * fiber ) {
372- if (fiber == NULL || fiber -> magic != FCONTEXT_FIBER_MAGIC || !fiber -> watermark_filled ) {
373- return 0 ;
374- }
348+ if (fiber == NULL || fiber -> magic != FCONTEXT_FIBER_MAGIC || !fiber -> watermark_filled ) { return 0 ; }
375349
376350 /* Scan from stack base for watermark bytes */
377351 unsigned char * stack_base = (unsigned char * )fiber -> stack_top - fiber -> stack_size ;
378352 size_t unused = 0 ;
379353
380- while (unused < fiber -> stack_size && stack_base [unused ] == FCONTEXT_STACK_WATERMARK ) {
381- unused ++ ;
382- }
354+ while (unused < fiber -> stack_size && stack_base [unused ] == FCONTEXT_STACK_WATERMARK ) { unused ++ ; }
383355
384356 return fiber -> stack_size - unused ;
385357}
@@ -389,19 +361,15 @@ extern size_t yafl_fiber_stack_high_watermark(yafl_fiber_t *fiber) {
389361 * ======================================================================== */
390362
391363extern void yafl_fiber_destroy (yafl_fiber_t * fiber ) {
392- if (fiber == NULL || fiber -> magic != FCONTEXT_FIBER_MAGIC ) {
393- return ;
394- }
364+ if (fiber == NULL || fiber -> magic != FCONTEXT_FIBER_MAGIC ) { return ; }
395365
396366 /* Cannot destroy running fiber */
397- if (fiber -> status == YAFL_FIBER_STATUS_RUNNING ) {
398- return ;
399- }
367+ if (fiber -> status == YAFL_FIBER_STATUS_RUNNING ) { return ; }
400368
401369 /* Free stack based on allocation type */
402- if (fiber -> alloc_type == FCONTEXT_ALLOC_MALLOC ) {
370+ if (fiber -> alloc_type == FCONTEXT_ALLOC_MALLOC ) {
403371 free (fiber -> stack_region );
404- } else if (fiber -> alloc_type == FCONTEXT_ALLOC_VMEM ) {
372+ } else if (fiber -> alloc_type == FCONTEXT_ALLOC_VMEM ) {
405373#ifdef _WIN32
406374 VirtualFree (fiber -> stack_region , 0 , MEM_RELEASE );
407375#else
@@ -418,6 +386,4 @@ extern void yafl_fiber_destroy(yafl_fiber_t *fiber) {
418386 * Utilities
419387 * ======================================================================== */
420388
421- extern size_t yafl_get_page_size (void ) {
422- return get_page_size ();
423- }
389+ extern size_t yafl_get_page_size (void ) { return get_page_size (); }
0 commit comments