[Libevent-users] event_init() and thread safety
Wouter Wijngaards
wouter at nlnetlabs.nl
Wed May 2 02:47:19 EDT 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
harry wrote:
> On Tue, May 01, 2007 at 10:38:50AM -0700, Steven Grimm wrote:
>> If you're calling event_init() more than once, you never want to call
>> event_set() and other such functions. You want to call event_set_base()
>> and pass in the handle you get back from event_init(). Using the
>> current_base versions of the event calls in a multithreaded app (where
>> you are using libevent from multiple threads in parallel) is almost
>> certainly going to break your app.
>>
>> In the MT version of memcached I call event_init() in my startup thread
>> and pass the handle to each of the worker threads I spawn. That way
>> there's no chance of race conditions during initialization.
>
> Thanks for the response. I don't see an event_set_base() function.
> Do you mean event_base_set()? My understanding is that you call
> event_set() to initialize the event structure and then call
> event_base_set() to change the event's base from current_base to
> whatever you got back from event_init(). Is this incorrect?
>
Yes.
Also, I fixed the event_init() thread problem in my thread-safety patch
that was included a while ago. So, libevent trunk and possibly recent
releases do not have this problem.
I also solved several other thread problems, for loopexit() and for
interrupt signal handling.
Best regards,
Wouter
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org
iD8DBQFGODP3kDLqNwOhpPgRAjRlAKCQKQ8xndjrhtHTEbDQR8BPCSxY9QCfWHcD
QKPtZ5I5RGBu0Y3jJhlCOD0=
=cqpO
-----END PGP SIGNATURE-----
More information about the Libevent-users
mailing list