Hi folks
I'm running into a problem that probably results from my ignorance. So I
figured I would ask if someone can tell me what I'm doing wrong.
I have a thread that loops the event library with the following call:
events += event_loop(mca_oob_tcp_component.event_base, EVLOOP_ONCE);
In another thread, I create and add an event that is supposed to occur when a
file descriptor is ready for "write":
event_set(mca_oob_tcp_component.event_base,
&peer->peer_send_event,
peer->peer_sd,
EV_WRITE|EV_PERSIST,
mca_oob_tcp_peer_send_handler,
peer);
event_add(&peer->peer_send_event, 0);
Note that the event_set and event_add can (and in this case, probably do) occur
while I am in the event_loop function.
What I find is that this event never gets fired. However, events that are set
and added -before- going into the loop do fire.
So my question is: given that this is a dynamic system, how do I get the
event_loop to "see" new events? I want to block in the loop, so I don't really
want to set NONBLOCK if I can avoid it (otherwise, I would have to add another
blocking call somewhere to keep the thread from endlessly cycling).
The only thing I could think of was to (a) create an event looking at a pipe,
and then (b) every time I define a new event, send a byte down the pipe to
break myself out of the loop, thus allowing the event_loop function to "see"
the new event.
Any cleaner alternatives? I figure this -must- be a common problem...
Ralph
***********************************************************************
To unsubscribe, send an e-mail to [email protected] with
unsubscribe libevent-users in the body.