From: Pekka Riikonen Date: Sat, 18 May 2002 08:32:20 +0000 (+0000) Subject: updates. X-Git-Tag: silc.client.0.9.1~1 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=86aaa76cff1d447f9cce40f0e1fa8d032a217274 updates. --- diff --git a/CHANGES b/CHANGES index 9230bc19..9e776e6b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,13 @@ +Sat May 18 11:35:19 EEST 2002 Pekka Riikonen + + * Allow multiple identical pending commands to be registered + in client library. Affected file is lib/silcclient/command.c. + + * Call the completion for resolving client information only + after all resolvers has finished. This fixes a crash in + the client. Added support for checking when the resolvers + are finished. Affected file is lib/silcclient/idlist.c. + Fri May 17 17:23:45 EEST 2002 Pekka Riikonen * Check the watcher list before sending signoff notifys diff --git a/apps/irssi/src/core/servers-reconnect.c b/apps/irssi/src/core/servers-reconnect.c index 1b17c921..86d900a6 100644 --- a/apps/irssi/src/core/servers-reconnect.c +++ b/apps/irssi/src/core/servers-reconnect.c @@ -423,7 +423,7 @@ static void read_settings(void) void servers_reconnect_init(void) { - settings_add_int("server", "server_reconnect_time", 300); + settings_add_int("server", "server_reconnect_time", 3000); reconnects = NULL; last_reconnect_tag = 0; diff --git a/lib/silcclient/command.c b/lib/silcclient/command.c index f7df19bf..7e60a0c1 100644 --- a/lib/silcclient/command.c +++ b/lib/silcclient/command.c @@ -103,16 +103,6 @@ void silc_client_command_pending(SilcClientConnection conn, { SilcClientCommandPending *reply; - /* Check whether identical pending already exists for same command, - ident, callback and callback context. If it does then it would be - error to register it again. */ - silc_dlist_start(conn->pending_commands); - while ((reply = silc_dlist_get(conn->pending_commands)) != SILC_LIST_END) { - if (reply->reply_cmd == reply_cmd && reply->ident == ident && - reply->callback == callback && reply->context == context) - return; - } - reply = silc_calloc(1, sizeof(*reply)); reply->reply_cmd = reply_cmd; reply->ident = ident; diff --git a/lib/silcclient/idlist.c b/lib/silcclient/idlist.c index a7fd0f71..e827bebf 100644 --- a/lib/silcclient/idlist.c +++ b/lib/silcclient/idlist.c @@ -287,6 +287,7 @@ typedef struct { SilcBuffer client_id_list; SilcGetClientCallback completion; void *context; + int res_count; } *GetClientsByListInternal; SILC_CLIENT_CMD_FUNC(get_clients_list_callback) @@ -301,6 +302,14 @@ SILC_CLIENT_CMD_FUNC(get_clients_list_callback) SILC_LOG_DEBUG(("Start")); + if (i->res_count) { + i->res_count--; + if (i->res_count) + return; + } + + SILC_LOG_DEBUG(("Resolved all clients")); + for (c = 0; c < i->list_count; c++) { SilcUInt16 idp_len; SilcClientID *client_id; @@ -410,6 +419,7 @@ void silc_client_get_clients_by_list(SilcClient client, silc_client_command_get_clients_list_callback, (void *)in); wait_res = TRUE; + in->res_count++; silc_free(client_id); silc_buffer_pull(client_id_list, idp_len); @@ -421,7 +431,7 @@ void silc_client_get_clients_by_list(SilcClient client, } /* No we don't have it, query it from the server. Assemble argument - table that will be sent fr the IDENTIFY command later. */ + table that will be sent for the IDENTIFY command later. */ res_argv = silc_realloc(res_argv, sizeof(*res_argv) * (res_argc + 1)); res_argv_lens = silc_realloc(res_argv_lens, sizeof(*res_argv_lens) * @@ -463,6 +473,7 @@ void silc_client_get_clients_by_list(SilcClient client, silc_client_command_pending(conn, SILC_COMMAND_IDENTIFY, conn->cmd_ident, silc_client_command_get_clients_list_callback, (void *)in); + in->res_count++; silc_buffer_free(res_cmd); silc_free(res_argv);