| blocking wait | |
| ------------- | |
| - allocate a new clock entry | |
| - add to list of pending sync waits | |
| - do { | |
| wait on entry | |
| } while (entry != restart) | |
| - free entry/remove from list | |
| async wait | |
| ---------- | |
| - if no thread, start thread | |
| - alloc a new clock entry | |
| - add to list of pending async waits | |
| - signal thread to restart timeouts | |
| async thread | |
| ------------ | |
| while (true) { | |
| if (no entry) wait for restart | |
| do { | |
| take first entry | |
| wait on it | |
| } while (entry != restart) | |
| call entry signal function | |
| free entry/remove from list | |
| } | |
| clock adjust | |
| ------------ | |
| - loop over sync/async entries | |
| - restart all entries | |