From 58a9bac60c2673cee2a69000bc4239de8ea941f4 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Mon, 18 Jun 2007 21:05:01 +0000 Subject: [PATCH] Fixed USERS command rely rwlock unlocking, which was missing. --- CHANGES | 11 +++++++++++ lib/silcclient/command_reply.c | 7 +++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index a456045e..fa591413 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,14 @@ +Mon Jun 18 23:47:22 EEST 2007 Pekka Riikonen + + * Use SILC_VERIFY to assert that silc_rwlock_wrlock can be + called only once per thread on Unix. Affected file is + lib/silcutil/unix/silcunixthread.c. Added same for mutex + as well. Documented same on the API in + lib/silcutil/silcmutex.h. + + * Fixed USERS command reply write-lock unlocking. Affected file + is lib/silcclient/command_reply.c. + Mon Jun 18 08:14:26 EEST 2007 Pekka Riikonen * Fixed silc_create_key_pair to check for valid identifier. diff --git a/lib/silcclient/command_reply.c b/lib/silcclient/command_reply.c index 3c0f56a8..61e4d73a 100644 --- a/lib/silcclient/command_reply.c +++ b/lib/silcclient/command_reply.c @@ -127,7 +127,7 @@ static void silc_client_command_process_error(SilcClientCommandContext cmd, if (cmd->error == SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID) { SilcChannelEntry channel; - /* Remove unknown client entry from cache */ + /* Remove unknown channel entry from cache */ if (!silc_argument_get_decoded(args, 2, SILC_ARGUMENT_ID, &id, NULL)) return; @@ -143,7 +143,7 @@ static void silc_client_command_process_error(SilcClientCommandContext cmd, if (cmd->error == SILC_STATUS_ERR_NO_SUCH_SERVER_ID) { SilcServerEntry server_entry; - /* Remove unknown client entry from cache */ + /* Remove unknown server entry from cache */ if (!silc_argument_get_decoded(args, 2, SILC_ARGUMENT_ID, &id, NULL)) return; @@ -733,6 +733,7 @@ SILC_FSM_STATE(silc_client_command_reply_nick) if (!silc_client_change_nickname(client, conn, conn->local_entry, nick, &id.u.client_id, idp, idp_len)) { ERROR_CALLBACK(SILC_STATUS_ERR_BAD_NICKNAME); + silc_rwlock_unlock(conn->local_entry->internal.lock); goto out; } @@ -1947,6 +1948,8 @@ SILC_FSM_STATE(silc_client_command_reply_users) } } + silc_rwlock_unlock(channel->internal.lock); + /* Notify application */ silc_hash_table_list(channel->user_list, &htl); silc_client_command_callback(cmd, channel, &htl); -- 2.24.0