… | |
… | |
341 | void |
341 | void |
342 | coro_transfer (coro_context *prev, coro_context *next) |
342 | coro_transfer (coro_context *prev, coro_context *next) |
343 | { |
343 | { |
344 | pthread_cond_signal (&next->cv); |
344 | pthread_cond_signal (&next->cv); |
345 | pthread_cond_wait (&prev->cv, &coro_mutex); |
345 | pthread_cond_wait (&prev->cv, &coro_mutex); |
|
|
346 | #if __FreeBSD__ /* freebsd is of course broken and needs manual testcancel calls... yay... */ |
|
|
347 | pthread_testcancel (); |
|
|
348 | #endif |
346 | } |
349 | } |
347 | |
350 | |
348 | void |
351 | void |
349 | coro_create (coro_context *ctx, coro_func coro, void *arg, void *sptr, long ssize) |
352 | coro_create (coro_context *ctx, coro_func coro, void *arg, void *sptr, long ssize) |
350 | { |
353 | { |