<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div name="messageBodySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;">
<p style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial, sans-serif;">I am trying to get libdispatch working on FreeBSD but I am hitting a wall: I cannot get my head around how the runloop implementation dispatches a event to the&#160;<b>kqueue</b>&#160;once a new job is submitted. So far I was able to get the library to fully compile but most tests are timing out due to a issue getting the kqueue event handler to awake when the&#160;<b>poke</b>&#160;method is called.</p>
<p style="margin: 10px 0px 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial, sans-serif;">Looking at the Linux implementation (<a href="https://github.com/apple/swift-corelibs-libdispatch/blob/master/src/queue.c#L6119)" class="external-link" rel="nofollow" style="color: rgb(59, 115, 175); text-decoration: none; cursor: pointer;">https://github.com/apple/swift-corelibs-libdispatch/blob/master/src/queue.c#L6119)</a>&#160;it appears&#160;to be creating a new&#160;<b>eventfd</b>&#160;descriptor and calls&#160;<b>eventfd_write</b>&#160;on the&#160;<b>poke</b>&#160;method. A&#160;<b>eventfd_read</b>&#160;call is only made in the&#160;<b>event_epoll.c</b>&#160;implementation file BUT I am unable to find where the specific fd (created in&#160;<b>queue.c</b>) is forwarded to the epool handler. In other words,&#160;<ins>how is the event queue implementation informed of that file descriptor?</ins></p>
<p style="margin: 10px 0px 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial, sans-serif;">On the Darwin side of things, it appears to use a mix of&#160;<b>kqueue</b>&#160;(on the event handling side) and mach ports (on the signaling side), but i still cannot understand how the&#160;<b>event_kevent.c</b>&#160;implementation becomes aware of that port allocated on&#160;<b>queue.c</b>.</p>
<p style="margin: 10px 0px 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial, sans-serif;">In order do get dispatch working on FreeBSD I need to be able to understand the flow that happens between&#160;<b>_dispatch_runloop_queue_class_poke</b>&#160;and a event getting fired in the kqueue implementation (which I believe should be happening&#160;in&#160;<b>_dispatch_kq_poll</b>).</p>
<p style="margin: 10px 0px 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial, sans-serif;"><br /></p>
<p style="margin: 10px 0px 0px; padding: 0px;"><font color="#333333" face="Arial, sans-serif">Pierre Habouzit replied to me on the bug tracker:</font></p>
<blockquote style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #1abc9c;">
<p style="margin: 10px 0px 0px; padding: 0px;"><span style="color: rgb(51, 51, 51); font-family: Arial, sans-serif; background-color: rgb(255, 255, 255);">The equivalent of the eventfd on kevent systems is to use an EVFILT_USER. It is very likely that the current implementation using kevent is badly broken on FreeBSD it has never run for a very long time. I have no access to FreeBSD at this time to help though but I can help with questions on the list.</span></p>
</blockquote>
<font color="#333333" face="Arial, sans-serif">Indeed, the entire library needed changes in 39 files to get compiling, let alone working! But I am getting there!</font>
<div><font color="#333333" face="Arial, sans-serif"><br /></font></div>
<div><font color="#333333" face="Arial, sans-serif">If i am understanding it correctly, I must send a EVFILT_USER and upon receiving that event I get the corresponding unote and call dux_merge_evt. Right?</font></div>
<div><br /></div>
<div><font color="#333333" face="Arial, sans-serif">Thank you,</font></div>
<div><font color="#333333" face="Arial, sans-serif">Rogiel Sulzbach</font></div>
</div>
<div name="messageReplySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;"><br />
<div></div>
</div>
</body>
</html>