silc_client_get_clients_local do not eturn any invalid entries.
authorPekka Riikonen <priikone@silcnet.org>
Wed, 14 Mar 2007 15:24:57 +0000 (15:24 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Wed, 14 Mar 2007 15:24:57 +0000 (15:24 +0000)
lib/silcclient/client.c
lib/silcclient/client_entry.c

index 932009862bf91dd0179bd14d168bafb311ef164d..37f757fe77baf17414557223490bb39c3aefe4ec 100644 (file)
@@ -538,9 +538,10 @@ SILC_FSM_STATE(silc_client_st_run)
   if (client->internal->stop) {
     /* Stop client libarry.  If we have running connections, wait until
        they finish first. */
-    SILC_LOG_DEBUG(("Event: stop"));
-    if (silc_atomic_get_int16(&client->internal->conns) == 0)
+    if (silc_atomic_get_int16(&client->internal->conns) == 0) {
+      SILC_LOG_DEBUG(("Event: stop"));
       silc_fsm_next(fsm, silc_client_st_stop);
+    }
     return SILC_FSM_CONTINUE;
   }
 
index ae7cba717d102c8d597731245240ffab4de00585..dfbe9fae9ed309231e4f66119a3b85be916a7e69 100644 (file)
@@ -106,15 +106,19 @@ SilcDList silc_client_get_clients_local(SilcClient client,
     /* Take all without any further checking */
     silc_list_start(list);
     while ((id_cache = silc_list_get(list))) {
-      silc_client_ref_client(client, conn, id_cache->context);
-      silc_dlist_add(clients, id_cache->context);
+      entry = id_cache->context;
+      if (entry->internal.valid) {
+       silc_client_ref_client(client, conn, id_cache->context);
+       silc_dlist_add(clients, id_cache->context);
+      }
     }
   } else {
     /* Check multiple cache entries for exact match */
     silc_list_start(list);
     while ((id_cache = silc_list_get(list))) {
       entry = id_cache->context;
-      if (silc_utf8_strcasecmp(entry->nickname, format)) {
+      if (silc_utf8_strcasecmp(entry->nickname, format) &&
+         entry->internal.valid) {
        silc_client_ref_client(client, conn, entry);
        silc_dlist_add(clients, entry);
       }