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