From: Olle Johansson Date: Thu, 7 Jun 2007 09:57:52 +0000 (+0000) Subject: Merged revisions 68027 via svnmerge from X-Git-Tag: 1.6.0-beta1~3^2~2442 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=18a9f4d805012ebb9298e857e77579f3b3a89f58;p=thirdparty%2Fasterisk.git Merged revisions 68027 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r68027 | oej | 2007-06-07 11:42:26 +0200 (Thu, 07 Jun 2007) | 8 lines If you have a jabber client that uses TLS, refuse unload. Bad fix, but will prevent crashes while we are trying to find a workaround. Iksemel development seems to have stalled and we might have to stop using the TCP/TLS connections in that library and use our own, which would scale better from a poll/select perspective I guess. It would also make it easier to migrate to OpenSSL and stop Asterisk from depending on both OpenSSL and GnuTLS. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@68029 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_jabber.c b/res/res_jabber.c index 47d243006a..12cd0f5b5c 100644 --- a/res/res_jabber.c +++ b/res/res_jabber.c @@ -57,6 +57,14 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define JABBER_CONFIG "jabber.conf" +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + /*-- Forward declarations */ static int aji_highest_bit(int number); static void aji_buddy_destroy(struct aji_buddy *obj); @@ -2065,6 +2073,7 @@ static int aji_create_client(char *label, struct ast_variable *var, int debug) ast_copy_string(client->name, label, sizeof(client->name)); ast_copy_string(client->mid, "aaaaa", sizeof(client->mid)); + /* Set default values for the client object */ client->debug = debug; ast_copy_flags(client, &globalflags, AST_FLAGS_ALL); client->port = 5222; @@ -2387,10 +2396,29 @@ static int aji_reload() static int unload_module(void) { + int module_uses_tls = FALSE; + + /* Check if any client use TLS. If that's the case, we can't unload this + module due to a bug in the iksemel library that will cause a crash or + a deadlock. We're trying to find a way to handle this, but in the meantime + we will simply refuse to die... + */ + ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, { + ASTOBJ_RDLOCK(iterator); + if (iterator->usetls) + module_uses_tls = TRUE; + ASTOBJ_UNLOCK(iterator); + }); + if (module_uses_tls) { + ast_log(LOG_ERROR, "Module can't be unloaded due to a bug in the Iksemel library when using TLS.\n"); + return 1; /* You need a forced unload to get rid of this module */ + } + ast_cli_unregister_multiple(aji_cli, sizeof(aji_cli) / sizeof(struct ast_cli_entry)); ast_unregister_application(app_ajisend); ast_unregister_application(app_ajistatus); ast_manager_unregister("JabberSend"); + ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, { ASTOBJ_RDLOCK(iterator); if (option_debug > 2)