From: Terry Wilson Date: Fri, 15 Oct 2010 16:16:57 +0000 (+0000) Subject: Don't crash or deadlock on module unload X-Git-Tag: 1.6.2.15-rc1~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9efbc7e9c1c5f2112048c24ddc51e931531ee087;p=thirdparty%2Fasterisk.git Don't crash or deadlock on module unload We can't hold the lock while pthread_join is called since aji_log_hook will attempt to lock from the other therad. We reorder the pthread_join and ast_aji_disconnect so that we don't do an SSL_read() while SSL_shutdown is running, causing a crash. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@291904 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_jabber.c b/res/res_jabber.c index dbbeab95c5..e4bdacc785 100644 --- a/res/res_jabber.c +++ b/res/res_jabber.c @@ -3061,12 +3061,12 @@ static int unload_module(void) ast_custom_function_unregister(&jabberstatus_function); ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, { - ASTOBJ_RDLOCK(iterator); + ASTOBJ_WRLOCK(iterator); ast_debug(3, "JABBER: Releasing and disconnecting client: %s\n", iterator->name); iterator->state = AJI_DISCONNECTING; - ast_aji_disconnect(iterator); - pthread_join(iterator->thread, NULL); ASTOBJ_UNLOCK(iterator); + pthread_join(iterator->thread, NULL); + ast_aji_disconnect(iterator); }); ASTOBJ_CONTAINER_DESTROYALL(&clients, aji_client_destroy);