updates.
authorPekka Riikonen <priikone@silcnet.org>
Sat, 18 May 2002 08:32:20 +0000 (08:32 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sat, 18 May 2002 08:32:20 +0000 (08:32 +0000)
CHANGES
apps/irssi/src/core/servers-reconnect.c
lib/silcclient/command.c
lib/silcclient/idlist.c

diff --git a/CHANGES b/CHANGES
index 9230bc197cb2f7d3a9bd7de35cad48d282a6008e..9e776e6bb39ebadb236bac4a0999408e85a21ec4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,13 @@
+Sat May 18 11:35:19 EEST 2002 Pekka Riikonen <priikone@silcnet.org>
+
+       * 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 <priikone@silcnet.org>
 
        * Check the watcher list before sending signoff notifys
index 1b17c921a4dc60bc45fc303430bbcdb6b067964f..86d900a6ebdcc35aa9cae219394a278399eeffe9 100644 (file)
@@ -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;
index f7df19bf7f378fb3be9d1eadadbf3f40a8a3c262..7e60a0c1739b132e2732cc252d2b2f2d9d5ac36b 100644 (file)
@@ -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;
index a7fd0f71f135fc007f037aed8a97b143531d1491..e827bebfa124a0295384c58df7b64b9b90a7027f 100644 (file)
@@ -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);