From 073e346f4e1ca7e2f360de24f55d2db1a3e0acda Mon Sep 17 00:00:00 2001
From: Matt O'Gorman <mogorman@digium.com>
Date: Thu, 1 Jun 2006 08:22:44 +0000
Subject: [PATCH] solves bug where reload deleted things it shouldnt have and
 adds check into jabberstatus so it cant segfault.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@31298 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 res/res_jabber.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/res/res_jabber.c b/res/res_jabber.c
index 16ac8c61a0..71a60552d5 100644
--- a/res/res_jabber.c
+++ b/res/res_jabber.c
@@ -332,7 +332,11 @@ static int aji_status_exec(struct ast_channel *chan, void *data)
 		ast_log(LOG_WARNING, "Could not find Connection.\n");
 		return -1;
 	}
-
+	
+	if(!&client->buddies) {
+		ast_log(LOG_WARNING, "No buddies for connection.\n");
+		return -1;
+	}
 	ASTOBJ_CONTAINER_TRAVERSE(&client->buddies, 1, {
 		ASTOBJ_RDLOCK(iterator); 
 		if (!strcasecmp(iterator->user, screenname)) {
@@ -2057,6 +2061,7 @@ static int aji_create_transport(char *label, struct aji_client *client)
 		}
 	}
 	ASTOBJ_UNLOCK(buddy);
+	ASTOBJ_UNMARK(buddy);
 	ASTOBJ_CONTAINER_LINK(&client->buddies, buddy);
 	return 0;
 }
@@ -2088,8 +2093,10 @@ static int aji_create_buddy(char *label, struct aji_client *client)
 	ASTOBJ_UNLOCK(buddy);
 	if(flag)
 		ASTOBJ_CONTAINER_LINK(&client->buddies, buddy);
-	else
+	else {
+		ASTOBJ_UNMARK(buddy);
 		ASTOBJ_UNREF(buddy, aji_buddy_destroy);
+	}
 	return 1;
 }
 
-- 
GitLab