Hi Voljta,

On 9.4.2012 22:15, Vojtech Horky wrote:
> Thus, the idea is to check for waiting IPC even if expired timeouts
> were processed.

I think this is a sane idea.

> It seems to me that the current implementation is
> trying to be fair: once something was done (expired timeouts were
> handled), the manager fibril switches to a normal fibril to give
> chance to other fibrils to run.

It seems to me that the current implementation understands the timeouts
rather strictly. In other words, zero timeout indicates a very impatient
waiter which doesn't allow any time for the wakeup condition to become
true even if that would have happened instantly. I think it won't hurt
if the wakeup condition is given one-more non-blocking test to see if
the waiter can get the message. Even if the message arrived just after
the timeout, the caller will get the message and the timeout event will
be silently ignored.

Please double check that calling handle_expired_timeouts() also before
going to ipc_wait_cycle() will not have any undesired side effects.

+                               timeout = 0;
+                               flags = SYNCH_FLAGS_NON_BLOCKING;

I don't think you need to clear timeout as SYNCH_FLAGS_NON_BLOCKING will
make the kernel ignore it.

Jakub

_______________________________________________
HelenOS-devel mailing list
[email protected]
http://lists.modry.cz/cgi-bin/listinfo/helenos-devel

Reply via email to