Re: macports-dev Digest, Vol 152, Issue 1

2019-04-01 Thread Clemens Lang
Hi Mihir,

On Mon, Apr 01, 2019 at 09:13:42PM +0530, Mihir Luthra wrote:
> Actually my question is what is the purpose of the call (1), because
> till what I understood, kevent(2) only lets the program proceed
> further when it will return and it only returns when it detects an
> event. Call (1) is supposed to detect a read event. I am asking where
> exactly that read event happens that makes that kevent return.

See the manpage for kevent(2), specifically the section on EV_RECEIPT.
Since this call passes EV_RECEIPT, no events are drained from the queue
and the call does not block. You'll see the same pattern multiple times:
A call to EV_SET with EV_ADD | EV_RECEIPT followed by a call to
kevent(2) with a pointer to the struct kevent and eventually a call to
kevent(2) without a pointer to a struct kevent that will process the
pending events.


HTH,
Clemens


Re: macports-dev Digest, Vol 152, Issue 1

2019-04-01 Thread Mihir Luthra
>
>
>
> Note that kevent(2) is a multi-purpose API. The call you refer to as (1)
> is not actually the mainloop of tracelib run. Rather, the call a little
> further down is:
>
>   keventstatus = kevent(kq, NULL, 0, res_kevents, MAX_SOCKETS, NULL))
>
> This will also return for new connections to the socket, which
> darwintrace.dylib creates. Depending on why kevent returned, the code
> will either process a line from a socket, or accept a new socket and
> then eventually call kevent again.
>
>
> Actually my question is what is the purpose of the call (1), because till
what I understood, kevent(2) only lets the program proceed further when it
will return and it only returns when it detects an event.
Call (1) is supposed to detect a read event. I am asking where exactly that
read event happens that makes that kevent return.


> I actually think it would be enough to just implement a Ctrie, but if
> you can find a suitable BSD-licensed (or compatible) implementation that
> you can reuse instead of re-implement you could also do the demo you
> suggested. I don't mind either way.
>
>
Ok, I will do that.

>
> >From what I can see, the proposal looks more detailed to me now.
> However, you are not yet addressing the inherent race conditions with
> the suggested approach in the shared memory area and the special
> conditions required due to use of shared memory, such as not being able
> to use normal pointers.
>

I will update the draft to add those.


>
> Please also look into the paper on arXiv I sent you a while ago, because
> that did seem the data structure proposed there would already solve some
> of our problems.
>

Sure, I will make it a priority.


> Don't underestimate the effort required to get the data structure
> implemented given the constraints of the environment. To be certain that
> your data structure works as it should, you will also have to write an
> extensive test suite for all functionality of the data structure,
> possibly using code coverage measurements.


I didn’t mean to underestimate, I already see it's really complex to deal
with so many things at a time.
I wanted to ask to get more clarity. Will put all effort & do the max I can.


>
>
Additionally, if you really think you'd be done with all of that early,
> you can include optional "stretch goals" that we can take up if you're
> done early, such as writing a test suite for trace mode functionality,
> writing documentation for the on-wire format between darwintrace.dylib
> and the server, etc.
>

Sure, I will analyse all points again and add accordingly.


Mihir