From: Corey Farrell Date: Tue, 27 Nov 2018 16:20:59 +0000 (-0500) Subject: res_pjsip: Patch for res_pjsip_* module load/reload crash X-Git-Tag: 13.24.0-rc1~4^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec02d7fd4cb084d8bd699e2c42d7abbd5ec90166;p=thirdparty%2Fasterisk.git res_pjsip: Patch for res_pjsip_* module load/reload crash The session_supplements for the pjsip makes crashes when the module load/unload. ASTERISK-28157 Change-Id: I5b82be3a75d702cf1933d8d1417f44aa10ad1029 --- diff --git a/include/asterisk/res_pjsip_session.h b/include/asterisk/res_pjsip_session.h index 0c2b1e326e..e2d4fcd27f 100644 --- a/include/asterisk/res_pjsip_session.h +++ b/include/asterisk/res_pjsip_session.h @@ -533,10 +533,14 @@ void ast_sip_session_unregister_sdp_handler(struct ast_sip_session_sdp_handler * * a module could reject an incoming request if desired. * * \param supplement The supplement to register + * \param module Referenced module(NULL safe) * \retval 0 Success * \retval -1 Failure */ -int ast_sip_session_register_supplement(struct ast_sip_session_supplement *supplement); +int ast_sip_session_register_supplement_with_module(struct ast_module *module, struct ast_sip_session_supplement *supplement); + +#define ast_sip_session_register_supplement(supplement) \ + ast_sip_session_register_supplement_with_module(ast_module_info->self, supplement) /*! * \brief Unregister a an supplement to SIP session processing diff --git a/res/res_pjsip/pjsip_session.c b/res/res_pjsip/pjsip_session.c index 074ec4e0bc..2002bbd4e5 100644 --- a/res/res_pjsip/pjsip_session.c +++ b/res/res_pjsip/pjsip_session.c @@ -56,10 +56,11 @@ void internal_sip_session_register_supplement(struct ast_sip_session_supplement } } -int ast_sip_session_register_supplement(struct ast_sip_session_supplement *supplement) +int ast_sip_session_register_supplement_with_module(struct ast_module *module, struct ast_sip_session_supplement *supplement) { internal_sip_session_register_supplement(supplement); internal_res_pjsip_ref(); + ast_module_shutdown_ref(module); return 0; } @@ -118,3 +119,11 @@ int ast_sip_session_add_supplements(struct ast_sip_session *session) return 0; } + +/* This stub is for ABI compatibility. */ +#undef ast_sip_session_register_supplement +int ast_sip_session_register_supplement(struct ast_sip_session_supplement *supplement); +int ast_sip_session_register_supplement(struct ast_sip_session_supplement *supplement) +{ + return ast_sip_session_register_supplement_with_module(NULL, supplement); +}