diff options
-rw-r--r-- | protocols/events_libevent.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/protocols/events_libevent.c b/protocols/events_libevent.c index 3328f68b..1119c2ab 100644 --- a/protocols/events_libevent.c +++ b/protocols/events_libevent.c @@ -38,6 +38,7 @@ static guint id_next; static GHashTable *id_hash; +static int quitting = 0; /* Since libevent doesn't handle two event handlers for one fd-condition very well (which happens sometimes when BitlBee changes event handlers @@ -74,6 +75,10 @@ void b_main_quit() { struct timeval tv; + /* libevent sometimes generates events before really quitting, + we want to stop them. */ + quitting = 1; + memset( &tv, 0, sizeof( struct timeval ) ); event_loopexit( &tv ); } @@ -98,6 +103,12 @@ static void b_event_passthrough( int fd, short event, void *data ) (which free()s b_ev, we have to remember the ID here. */ id = b_ev->id; + if( quitting ) + { + b_event_remove( id ); + return; + } + if( !b_ev->function( b_ev->data, fd, cond ) ) { event_debug( "Handler returned FALSE: " ); |