Mercurial > pidgin
changeset 8280:084ed9f7ac19
[gaim-migrate @ 9004]
Soem tweaks from Scott Lamb for the event loop code.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Tue, 17 Feb 2004 08:43:44 +0000 |
parents | 319448d52b33 |
children | 98d8faecf5f1 |
files | src/eventloop.c src/eventloop.h src/gtkeventloop.c src/session.c |
diffstat | 4 files changed, 37 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eventloop.c Tue Feb 17 06:16:49 2004 +0000 +++ b/src/eventloop.c Tue Feb 17 08:43:44 2004 +0000 @@ -34,7 +34,7 @@ return ops->timeout_add(interval, function, data); } -gint +guint gaim_input_add(int source, GaimInputCondition condition, GaimInputFunction func, gpointer user_data) { GaimEventLoopUiOps *ops = gaim_eventloop_get_ui_ops(); @@ -43,7 +43,7 @@ } void -gaim_input_remove(gint tag) +gaim_input_remove(guint tag) { GaimEventLoopUiOps *ops = gaim_eventloop_get_ui_ops();
--- a/src/eventloop.h Tue Feb 17 06:16:49 2004 +0000 +++ b/src/eventloop.h Tue Feb 17 08:43:44 2004 +0000 @@ -57,14 +57,14 @@ * Adds an input handler. * @see gaim_input_add, g_io_add_watch_full */ - gint (*input_add)(int source, GaimInputCondition cond, - GaimInputFunction func, gpointer user_data); + guint (*input_add)(int fd, GaimInputCondition cond, + GaimInputFunction func, gpointer user_data); /** * Removes an input handler. * @see gaim_input_remove, g_source_remove */ - void (*input_remove)(gint handle); + void (*input_remove)(guint handle); }; /**************************************************************************/ @@ -85,7 +85,7 @@ /** * Adds an input handler. * - * @param source The input source. + * @param fd The input file descriptor. * @param cond The condition type. * @param func The callback function for data. * @param user_data User-specified data. @@ -93,15 +93,16 @@ * @return The resulting handle. * @see g_io_add_watch_full */ -gint gaim_input_add(int source, GaimInputCondition cond, - GaimInputFunction func, gpointer user_data); +guint gaim_input_add(int fd, GaimInputCondition cond, + GaimInputFunction func, gpointer user_data); /** * Removes an input handler. * - * @param handle The handle of the input handler. + * @param handle The handle of the input handler. Note that this is the return + * value from gaim_input_add, <i>not</i> the file descriptor. */ -void gaim_input_remove(gint handle); +void gaim_input_remove(guint handle); /*@}*/
--- a/src/gtkeventloop.c Tue Feb 17 06:16:49 2004 +0000 +++ b/src/gtkeventloop.c Tue Feb 17 08:43:44 2004 +0000 @@ -63,7 +63,7 @@ return TRUE; } -static gint gaim_gtk_input_add(gint source, GaimInputCondition condition, GaimInputFunction function, +static guint gaim_gtk_input_add(gint fd, GaimInputCondition condition, GaimInputFunction function, gpointer data) { GaimGtkIOClosure *closure = g_new0(GaimGtkIOClosure, 1); @@ -78,21 +78,21 @@ if (condition & GAIM_INPUT_WRITE) cond |= GAIM_GTK_WRITE_COND; - channel = g_io_channel_unix_new(source); + channel = g_io_channel_unix_new(fd); closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond, gaim_gtk_io_invoke, closure, gaim_gtk_io_destroy); #if 0 gaim_debug(GAIM_DEBUG_MISC, "gtk_eventloop", "CLOSURE: adding input watcher %d for fd %d\n", - closure->result, source); + closure->result, fd); #endif g_io_channel_unref(channel); return closure->result; } -static void gaim_gtk_input_remove(gint tag) +static void gaim_gtk_input_remove(guint tag) { /* gaim_debug(GAIM_DEBUG_MISC, "proxy", "CLOSURE: removing input watcher %d\n", tag); */
--- a/src/session.c Tue Feb 17 06:16:49 2004 +0000 +++ b/src/session.c Tue Feb 17 08:43:44 2004 +0000 @@ -46,31 +46,38 @@ /* ICE belt'n'braces stuff */ +struct ice_connection_info { + IceConn connection; + guint input_id; +}; + static void ice_process_messages(gpointer data, gint fd, GaimInputCondition condition) { - IceConn connection = (IceConn)data; + struct ice_connection_info *conninfo = (struct ice_connection_info*) data; IceProcessMessagesStatus status; /* please don't block... please! */ - status = IceProcessMessages(connection, NULL, NULL); + status = IceProcessMessages(conninfo->connection, NULL, NULL); if (status == IceProcessMessagesIOError) { gaim_debug(GAIM_DEBUG_INFO, "Session Management", "ICE IO error, closing connection... "); /* IO error, please disconnect */ - IceSetShutdownNegotiation(connection, False); - IceCloseConnection(connection); + IceSetShutdownNegotiation(conninfo->connection, False); + IceCloseConnection(conninfo->connection); gaim_debug(GAIM_DEBUG_INFO, NULL, "done.\n"); /* cancel the handler */ - gaim_input_remove(IceConnectionNumber(connection)); + gaim_input_remove(conninfo->input_id); } } static void ice_connection_watch(IceConn connection, IcePointer client_data, Bool opening, IcePointer *watch_data) { + struct ice_connection_info *conninfo = NULL; + if (opening) { gaim_debug(GAIM_DEBUG_INFO, "Session Management", "Handling new ICE connection... "); @@ -78,15 +85,21 @@ /* ensure ICE connection is not passed to child processes */ fcntl(IceConnectionNumber(connection), F_SETFD, FD_CLOEXEC); + conninfo = g_new(struct ice_connection_info, 1); + conninfo->connection = connection; + /* watch the connection */ - gaim_input_add(IceConnectionNumber(connection), GAIM_INPUT_READ, - ice_process_messages, connection); + conninfo->input_id = gaim_input_add(IceConnectionNumber(connection), GAIM_INPUT_READ, + ice_process_messages, conninfo); + *watch_data = conninfo; } else { gaim_debug(GAIM_DEBUG_INFO, "Session Management", "Handling closed ICE connection... "); - /* stop watching it */ - gaim_input_remove(IceConnectionNumber(connection)); + /* get the input ID back and stop watching it */ + conninfo = (struct ice_connection_info*) *watch_data; + gaim_input_remove(conninfo->input_id); + g_free(conninfo); } gaim_debug(GAIM_DEBUG_INFO, NULL, "done.\n");