125 static void basic_test()
142 events,
sizeof(events),
sizeof(events[0]))
197 static void sleep_test()
275 static void yield_test()
297 for (
int i=0; i<10; i++) {
299 verify(yielder[0].count == i);
300 verify(yielder[1].count == i);
301 verify(yielder[2].count == i);
306 verify(yielder[0].count == i+1);
307 verify(yielder[1].count == i);
308 verify(yielder[2].count == i);
313 verify(yielder[0].count == i+1);
314 verify(yielder[1].count == i+1);
315 verify(yielder[2].count == i);
320 verify(yielder[0].count == i+1);
321 verify(yielder[1].count == i+1);
322 verify(yielder[2].count == i+1);
332 for (
int i=11; i<15; i++) {
334 verify(yielder[0].count == 10);
335 verify(yielder[1].count == i);
336 verify(yielder[2].count == 10);
340 verify(yielder[1].count == i+1);
#define containerof(ptr, type, member)
event_descriptor_t last_event
#define FIBRE_VAR_INIT(fn)
Static initializer for a fibre descriptor.
void * fibre_eventq_claim(fibre_eventq_t *evtq)
Request memory resources to send an event to a fibre.
int sleep_fibre(fibre_t *f)
uint32_t fibre_scheduler_next(uint32_t time)
Schedule the next fibre.
int exit_fibre(fibre_t *f)
int yield_fibre(fibre_t *f)
bool fibre_eventq_send(fibre_eventq_t *evtq, void *evtp)
Send an event to a fibre.
void fibre_eventq_release(fibre_eventq_t *evtq, void *evtp)
Release a message previously received by a fibre.
void * fibre_eventq_receive(fibre_eventq_t *evtq)
Recevied a message previously send to the fibre.
bool fibre_run_atomic(fibre_t *f)
#define FIBRE_EVENTQ_VAR_INIT(fn, basep, base_len, msg_len)
Static initializer for a fibre and eventq descriptor.
int event_handler(fibre_t *f)
#define FIBRE_UNBOUNDED_SLEEP
An approximation of infinitely far in the future.
Fibre and eventq descriptor.
fibre_t * fibre_self(void)
Returns the currently active fibre descriptor.
#define PT_BEGIN_FIBRE(f)
Fibre aware alternative to PT_BEGIN().
void fibre_run(fibre_t *f)
bool fibre_timeout(uint32_t duetime)
int atomic_fibre(fibre_t *f)