I've noted this while debugging #102; sometimes things can "stall" just because a threading is waiting on a mailbox that never gets populated.
The way to do it:
Record the timeout_timestamp_timeslice in mailbox_receive, in current_tss. If timeout is 0, it should fall back to the current behavior (wait indefinitely), which is actually desirable sometimes - the service mailbox for servers are the most typical case. The server wants to wait until it receives a connection request, even though that takes 7 days, 30 days or 365 days.
In the dispatcher, check if the current timeslice has reached the timeout_timestamp_timeslice. If so, unblock the thread and make mailbox_receive detect that the wait was aborted and return a return value to the caller indicating this.
I've noted this while debugging #102; sometimes things can "stall" just because a threading is waiting on a mailbox that never gets populated.
The way to do it:
timeout_timestamp_timeslice
inmailbox_receive
, incurrent_tss
. If timeout is 0, it should fall back to the current behavior (wait indefinitely), which is actually desirable sometimes - the service mailbox for servers are the most typical case. The server wants to wait until it receives a connection request, even though that takes 7 days, 30 days or 365 days.timeout_timestamp_timeslice
. If so, unblock the thread and makemailbox_receive
detect that the wait was aborted and return a return value to the caller indicating this.