It looks like this would be a pretty easy problem to fix -- just make
evsignal_init() check to see if the socketpair has already been
allocated, and return without doing anything if so. Then you just need
to make sure your first call to event_init() happens in only one thread.
(I am assuming here that you don't actually need signal handling; if you
do, then that first thread's event base would need to be kept around
since it'd be the only one handling incoming signals.)
Barring that, can you maintain a freelist of event bases and only
allocate new ones when there aren't any unused ones left? That wouldn't
fix the underlying bug, but would at least limit your file descriptor
leakage to 2x the largest number of event bases in use at a time.
-Steve
Massimo Cetra wrote:
Hi list,
i'm experimenting with libevent in an heavy threaded application.
The application works quite well using all the event_base_ stuff to
handle the events in a thread safe way.
My problem is that all the threads that i create have a short life
(short as as little as a couple of minutes), so i have to event_init()
once in every thread to have an event base struct.
No problem about the methods... the problem arises because even_init()
calls evsignal_init() which opens a socket pair which is completely
lost and those sockets are never closed.
I end up having a couple of fresh, unused and useless file descriptors
for every thread that i have created and there seems no way to close
those sockets and sockets are limited...
Am i missing something or is this a known issue ?
This behaviour makes libevent useless for many threaded apps ...
Thanks for your answers...
Massimo Cetra
_______________________________________________
Libevent-users mailing list
[email protected]
http://monkey.org/mailman/listinfo/libevent-users
_______________________________________________
Libevent-users mailing list
[email protected]
http://monkey.org/mailman/listinfo/libevent-users