Kqueue and threading
Willem Jan Withagen
wjw at digiware.nl
Sat Oct 1 18:02:20 UTC 2016
Hi,
Ceph uses a lot of threading, and for any part of it communication it
uses epoll(), which FreeBSD does not use. For that there was already a
EvenKqueue implementation.
But I think I'm now running into:
The kqueue() system call creates a new kernel event queue and
returns a descriptor. The queue is not inherited by a child
created with fork(2). However, if rfork(2) is called without the
RFFDG flag, then the descriptor table is shared, which will allow
sharing of the kqueue between two processes.
Kqueue descriptors are created and events are added, but then the
process starts other threads and expects the kqueue-id to be valid there.
However adding more events returns an error, also waiting on the ID for
events to happen returns an error (descriptor invalid)
Threading is done with 2 different constructions:
std::thread
and creating Workers
Would any of these qualify with the quoted warning? and invalidate the
descriptor table?
If not, how can I (easily) debug the reason why my descriptors go invalid?
thanx,
--WjW
More information about the freebsd-hackers
mailing list