+ time_t wtime = pos->sleep.wakeup_time;
+ time_t atime = pos->sleep.alarm_time;
+
+ if (wtime && now >= wtime) {
+ pos->sleep.wakeup_time = 0;
+ pos->state = PS_STOPPED;
+ }
+
+ if (atime && now >= atime) {
+ pos->sleep.alarm_time = 0;
+ __SIGSET(pos->sig_pending, _SIGALRM);
+ }
+
+ if (!wtime && !atime) {
+ del:
+ llist_delete(&pos->sleep.sleepers);
+ }
+ }