On 2025-09-04 22:14, Konstantin Belousov wrote:
BTW, you added some support for kqueue for jail events, but not to the
jail file descriptors.  This seems to be backward: if somebody wants to
monitor events for jails, then it is more reliable and straightforward
to do with the new jail fds rather than with ids.

It is at least incomplete, and not the state I want things to be at.
There's a sticking point with jaildesc kqueue, so while I work that
out I went with jid-baseds kqueue as a starter.

The trouble is child jails.  I took their handling from the existing
child process handling, where I register a new kevent under the new
jail's id.  But that's something I can't do with descriptors, since
they have a process-specific identifier, the descriptor number.  The
code that creates the new event, coming from the jail_set call that
created a new jail, has access to the global descriptor (the struct
file), but not to the process(es) that have it open, so I have no
way of registering one or more events with that descriptor number.

One workaround is to have both jid- and jaildesc-based kevents, but
both of them register a new jid-based kevent for a newly created child
jail.  The caller may then get a descriptor with jail_get, and add a
kevent for it and remove the old jid-based one.  This would work, but
feels really klunky.

The other idea I've had is to register a temporary event, and then add
code to kqueue_scan that converts that into a proper jaildesc event
with the expected file descriptor number.  That would require either
jaildesc-specific code in or around kqueue_scan, or adding another
filterops function, neither of which is great.  Still, it seems the
better solution.

With working jaildesc kevent support, the jid-based kevents would be
unnecessary, so if I can get this done before 15 is released, they can
go away.

- Jamie

Reply via email to