On 03/15/2013 06:19 PM, Ryan Stone wrote:
On Fri, Mar 15, 2013 at 12:46 PM, Sebastian Huber <[email protected] <mailto:[email protected]>> wrote:Hello, I want to port the FreeBSD kqueue implementation to another operating system (RTEMS in this case) to improve the Erlang support. I have difficulties to understand the purpose of the kqueue_task. This function runs asynchronously. It obtains some locks and wakes up the normal kqueue channel if (kq->kq_state & KQ_TASKDRAIN) == KQ_TASKDRAIN. This state is only set in kqueue_close(). So most of the time the kqueue_task only obtains some locks, clears a flag (KQ_TASKSCHED) and releases the locks? You missed the most important thing that it does: it calls KNOTE_LOCKED to wake up any waiters sleeping on this event. I suspect that it had to be done in a separate task due to lock ordering problems with the kq_global lock.
Oh, I was blind. This KNOTE_LOCKED looked more like an assertion to me. -- Sebastian Huber, embedded brains GmbH Address : Dornierstr. 4, D-82178 Puchheim, Germany Phone : +49 89 189 47 41-16 Fax : +49 89 189 47 41-09 E-Mail : [email protected] PGP : Public key available on request. Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG. _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[email protected]"

