From cdca30b360c09399f1e5a2556d83ec997006cd75 Mon Sep 17 00:00:00 2001 From: Wilmer van der Gaast Date: Sat, 27 May 2006 17:33:58 +0200 Subject: Making sure that event handlers don't get called anymore after a call to b_main_quit(). --- protocols/events_libevent.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'protocols') 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: " ); -- cgit v1.2.3