projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
silcclient: Add generic client entry operation context
[silc.git]
/
lib
/
silcclient
/
client_entry.c
diff --git
a/lib/silcclient/client_entry.c
b/lib/silcclient/client_entry.c
index 2a94f11bad3792b65d420b64de1ad436dba2677b..0639c04dfe37a04fea97063bc3da07f8953ca5d7 100644
(file)
--- a/
lib/silcclient/client_entry.c
+++ b/
lib/silcclient/client_entry.c
@@
-4,7
+4,7
@@
Author: Pekka Riikonen <priikone@silcnet.org>
Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 2001 - 20
08
Pekka Riikonen
+ Copyright (C) 2001 - 20
14
Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-1007,6
+1007,9
@@
void silc_client_del_client_entry(SilcClient client,
if (client_entry->internal.hmac_receive)
silc_hmac_free(client_entry->internal.hmac_receive);
silc_client_ftp_session_free_client(client, client_entry);
if (client_entry->internal.hmac_receive)
silc_hmac_free(client_entry->internal.hmac_receive);
silc_client_ftp_session_free_client(client, client_entry);
+ if (client_entry->internal.op)
+ silc_async_abort(client_entry->internal.op, NULL, NULL);
+ client_entry->internal.op = NULL;
if (client_entry->internal.ke)
silc_client_abort_key_agreement(client, conn, client_entry);
silc_atomic_uninit32(&client_entry->internal.deleted);
if (client_entry->internal.ke)
silc_client_abort_key_agreement(client, conn, client_entry);
silc_atomic_uninit32(&client_entry->internal.deleted);
@@
-1030,6
+1033,14
@@
SilcBool silc_client_del_client(SilcClient client, SilcClientConnection conn,
return FALSE;
}
return FALSE;
}
+ /* Abort ongoing operation */
+ if (client_entry->internal.op) {
+ SILC_LOG_DEBUG(("Aborting ongoing operation %p",
+ client_entry->internal.op));
+ silc_async_abort(client_entry->internal.op, NULL, NULL);
+ client_entry->internal.op = NULL;
+ }
+
silc_client_unref_client(client, conn, client_entry);
return TRUE;
}
silc_client_unref_client(client, conn, client_entry);
return TRUE;
}