diff options
author | Matt O'Gorman <mogorman@digium.com> | 2006-06-01 08:22:44 +0000 |
---|---|---|
committer | Matt O'Gorman <mogorman@digium.com> | 2006-06-01 08:22:44 +0000 |
commit | 073e346f4e1ca7e2f360de24f55d2db1a3e0acda (patch) | |
tree | bd4f6a8456b03ab8664f78c620cb33fd56c3b588 /res/res_jabber.c | |
parent | 8cfb992c1ea9a01c0a78ed633d717166d7e658a4 (diff) |
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
Diffstat (limited to 'res/res_jabber.c')
-rw-r--r-- | res/res_jabber.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/res/res_jabber.c b/res/res_jabber.c index 16ac8c61a..71a60552d 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; } |