X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient_register.c;h=42cb36772e682fa5a670193c1126e7bb7cffb1ef;hb=77336860c5d419c9d25a6366de0269c0edb38889;hp=977118032b854e7fdfb8d373b60a425acdafd948;hpb=5e8e3a77c70f10a29e78aa645366c84564b8bc7d;p=silc.git diff --git a/lib/silcclient/client_register.c b/lib/silcclient/client_register.c index 97711803..42cb3677 100644 --- a/lib/silcclient/client_register.c +++ b/lib/silcclient/client_register.c @@ -186,6 +186,18 @@ SILC_FSM_STATE(silc_client_st_register_complete) SilcClientConnection conn = fsm_context; SilcClient client = conn->client; + if (conn->internal->aborted) { + /** Aborted */ + silc_fsm_next(fsm, silc_client_st_register_error); + return SILC_FSM_CONTINUE; + } + + if (conn->internal->disconnected) { + /** Disconnected */ + silc_fsm_next(fsm, silc_client_st_register_error); + return SILC_FSM_CONTINUE; + } + if (!conn->local_id) { if (conn->internal->retry_count++ >= SILC_CLIENT_RETRY_COUNT) { /** Timeout, ID not received */ @@ -255,8 +267,10 @@ SILC_FSM_STATE(silc_client_st_register_error) } /* Call connect callback */ - conn->callback(client, conn, SILC_CLIENT_CONN_ERROR, 0, NULL, - conn->callback_context); + if (conn->internal->callback_called) + conn->callback(client, conn, SILC_CLIENT_CONN_ERROR, 0, NULL, + conn->callback_context); + conn->internal->callback_called = TRUE; silc_schedule_task_del_by_all(conn->internal->schedule, 0, silc_client_connect_timeout, conn);