Author: mjordan Date: Sun Oct 5 19:13:58 2014 New Revision: 424602 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=424602 Log: res/res_pjsip_pubsub: Gracefully handle errors when re-creating subscriptions
A subscription that has been persisted can - for various reasons - fail to be re-created on startup. This patch resolves a number of crashes that occurred when a subscription cannot be re-created on several off-nominal paths. #SIPit31 ASTERISK-24368 #close Reported by: Matt Jordan ........ Merged revisions 424601 from http://svn.asterisk.org/svn/asterisk/branches/13 Modified: trunk/ (props changed) trunk/res/res_pjsip_pubsub.c Propchange: trunk/ ------------------------------------------------------------------------------ Binary property 'branch-13-merged' - no diff available. Modified: trunk/res/res_pjsip_pubsub.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip_pubsub.c?view=diff&rev=424602&r1=424601&r2=424602 ============================================================================== --- trunk/res/res_pjsip_pubsub.c (original) +++ trunk/res/res_pjsip_pubsub.c Sun Oct 5 19:13:58 2014 @@ -1038,8 +1038,10 @@ AST_RWLIST_TRAVERSE_SAFE_BEGIN(&subscriptions, i, next) { if (i == obj) { AST_RWLIST_REMOVE_CURRENT(next); - ast_debug(1, "Removing subscription to resource %s from list of subscriptions\n", - ast_sip_subscription_get_resource_name(i->root)); + if (i->root) { + ast_debug(1, "Removing subscription to resource %s from list of subscriptions\n", + ast_sip_subscription_get_resource_name(i->root)); + } break; } } @@ -1141,6 +1143,10 @@ static void shutdown_subscriptions(struct ast_sip_subscription *sub) { int i; + + if (!sub) { + return; + } if (AST_VECTOR_SIZE(&sub->children) > 0) { for (i = 0; i < AST_VECTOR_SIZE(&sub->children); ++i) { @@ -1357,6 +1363,11 @@ ast_sip_pubsub_has_eventlist_support(&rdata)); if (PJSIP_IS_STATUS_IN_CLASS(resp, 200)) { sub_tree = create_subscription_tree(handler, endpoint, &rdata, resource, generator, &tree); + if (!sub_tree) { + ast_sorcery_delete(ast_sip_get_sorcery(), persistence); + ast_log(LOG_WARNING, "Failed to re-create subscription for %s\n", persistence->endpoint); + return 0; + } sub_tree->persistence = ao2_bump(persistence); subscription_persistence_update(sub_tree, &rdata); } else { -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits
