--- asterisk-1.8.2.3/res/res_jabber.c 2010-11-26 18:31:17.000000000 +0000 +++ asterisk-1.8.2.3_orig/res/res_jabber.c 2011-04-14 13:48:23.000000000 +0100 @@ -4649,7 +4649,19 @@ } else if (res == -1) return 1; + // Disconnect and destoy marked clients + ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, { + if (iterator->objflags & ASTOBJ_FLAG_MARKED) { + ASTOBJ_RDLOCK(iterator); + ast_log (LOG_WARNING, "Disconnecting client %s since it's marked for destruction (no longer in configuration file).\n", iterator->user); + iterator->state = AJI_DISCONNECTING; + ASTOBJ_UNLOCK(iterator); + pthread_join(iterator->thread, NULL); + ast_aji_disconnect(iterator); + } + }); ASTOBJ_CONTAINER_PRUNE_MARKED(&clients, aji_client_destroy); + ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, { ASTOBJ_RDLOCK(iterator); if (iterator->state == AJI_DISCONNECTED) {