diff options
Diffstat (limited to 'protocols/events_libevent.c')
-rw-r--r-- | protocols/events_libevent.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/protocols/events_libevent.c b/protocols/events_libevent.c index f892e3eb..b9464093 100644 --- a/protocols/events_libevent.c +++ b/protocols/events_libevent.c @@ -80,28 +80,35 @@ static void b_event_passthrough( int fd, short event, void *data ) cond |= GAIM_INPUT_WRITE; } + event_debug( "b_event_passthrough( %d, %d, 0x%x ) (%d)\n", fd, event, (int) data, b_ev->id ); + if( !b_ev->function( b_ev->data, fd, cond ) ) + { + event_debug( "Handler returned FALSE: " ); b_event_remove( b_ev->id ); + } } -gint b_input_add( gint source, b_input_condition condition, b_event_handler function, gpointer data ) +gint b_input_add( gint fd, b_input_condition condition, b_event_handler function, gpointer data ) { struct b_event_data *b_ev = g_new0( struct b_event_data, 1 ); - GIOCondition cond; + GIOCondition out_cond; b_ev->id = id_next++; b_ev->function = function; b_ev->data = data; - cond = EV_PERSIST; + out_cond = EV_PERSIST; if( condition & GAIM_INPUT_READ ) - cond |= EV_READ; + out_cond |= EV_READ; if( condition & GAIM_INPUT_WRITE ) - cond |= EV_WRITE; + out_cond |= EV_WRITE; - event_set( &b_ev->evinfo, source, cond, b_event_passthrough, b_ev ); + event_set( &b_ev->evinfo, fd, out_cond, b_event_passthrough, b_ev ); event_add( &b_ev->evinfo, NULL ); + event_debug( "b_input_add( %d, %d, 0x%x, 0x%x ) = %d\n", fd, condition, function, data, b_ev->id ); + g_hash_table_insert( id_hash, &b_ev->id, b_ev ); return b_ev->id; @@ -123,25 +130,33 @@ gint b_timeout_add( gint timeout, b_event_handler function, gpointer data ) evtimer_set( &b_ev->evinfo, b_event_passthrough, b_ev ); evtimer_add( &b_ev->evinfo, &tv ); + event_debug( "b_timeout_add( %d, %d, 0x%x ) = %d\n", timeout, function, data, b_ev->id ); + g_hash_table_insert( id_hash, &b_ev->id, b_ev ); return b_ev->id; } -void b_event_remove( gint tag ) +void b_event_remove( gint id ) { - struct b_event_data *b_ev = g_hash_table_lookup( id_hash, &tag ); + struct b_event_data *b_ev = g_hash_table_lookup( id_hash, &id ); + event_debug( "b_event_remove( %d )\n", id ); if( b_ev ) { event_del( &b_ev->evinfo ); g_hash_table_remove( id_hash, &b_ev->id ); g_free( b_ev ); } + else + { + event_debug( "Invalid?\n" ); + } } gboolean b_event_remove_by_data( gpointer data ) { /* FIXME! */ + event_debug( "FALSE!\n" ); return FALSE; } |