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;
}
/* 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);
}