Merge "res_pjsip_registrar.c: Update remove_existing AOR contact handling."
[asterisk/asterisk.git] / res / res_pjsip.c
index cbeb5ea..a784e12 100644 (file)
@@ -2448,25 +2448,20 @@ static int register_service_noref(void *data)
        return 0;
 }
 
-static int register_service(void *data)
-{
-       int res;
-
-       if (!(res = register_service_noref(data))) {
-               ast_module_ref(ast_module_info->self);
-       }
-
-       return res;
-}
-
 int internal_sip_register_service(pjsip_module *module)
 {
        return ast_sip_push_task_synchronous(NULL, register_service_noref, &module);
 }
 
-int ast_sip_register_service(pjsip_module *module)
+int __ast_sip_register_service(pjsip_module *module, const char *file, int line, const char *func)
 {
-       return ast_sip_push_task_synchronous(NULL, register_service, &module);
+       int res;
+
+       if (!(res = ast_sip_push_task_synchronous(NULL, register_service_noref, &module))) {
+               __ast_module_ref(ast_module_info->self, file, line, func);
+       }
+
+       return res;
 }
 
 static int unregister_service_noref(void *data)
@@ -2480,25 +2475,16 @@ static int unregister_service_noref(void *data)
        return 0;
 }
 
-static int unregister_service(void *data)
-{
-       int res;
-
-       if (!(res = unregister_service_noref(data))) {
-               ast_module_unref(ast_module_info->self);
-       }
-
-       return res;
-}
-
 int internal_sip_unregister_service(pjsip_module *module)
 {
        return ast_sip_push_task_synchronous(NULL, unregister_service_noref, &module);
 }
 
-void ast_sip_unregister_service(pjsip_module *module)
+void __ast_sip_unregister_service(pjsip_module *module, const char *file, int line, const char *func)
 {
-       ast_sip_push_task_synchronous(NULL, unregister_service, &module);
+       if (!ast_sip_push_task_synchronous(NULL, unregister_service_noref, &module)) {
+               __ast_module_unref(ast_module_info->self, file, line, func);
+       }
 }
 
 static struct ast_sip_authenticator *registered_authenticator;
@@ -3542,7 +3528,7 @@ int ast_sip_create_request(const char *method, struct pjsip_dialog *dlg,
 
 AST_RWLIST_HEAD_STATIC(supplements, ast_sip_supplement);
 
-int ast_sip_register_supplement(struct ast_sip_supplement *supplement)
+void internal_sip_register_supplement(struct ast_sip_supplement *supplement)
 {
        struct ast_sip_supplement *iter;
        int inserted = 0;
@@ -3560,22 +3546,41 @@ int ast_sip_register_supplement(struct ast_sip_supplement *supplement)
        if (!inserted) {
                AST_RWLIST_INSERT_TAIL(&supplements, supplement, next);
        }
-       ast_module_ref(ast_module_info->self);
+}
+
+int __ast_sip_register_supplement(struct ast_sip_supplement *supplement,
+       const char *file, int line, const char *func)
+{
+       internal_sip_register_supplement(supplement);
+       __ast_module_ref(ast_module_info->self, file, line, func);
+
        return 0;
 }
 
-void ast_sip_unregister_supplement(struct ast_sip_supplement *supplement)
+int internal_sip_unregister_supplement(struct ast_sip_supplement *supplement)
 {
        struct ast_sip_supplement *iter;
        SCOPED_LOCK(lock, &supplements, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
+       int res = -1;
+
        AST_RWLIST_TRAVERSE_SAFE_BEGIN(&supplements, iter, next) {
                if (supplement == iter) {
                        AST_RWLIST_REMOVE_CURRENT(next);
-                       ast_module_unref(ast_module_info->self);
+                       res = 0;
                        break;
                }
        }
        AST_RWLIST_TRAVERSE_SAFE_END;
+
+       return res;
+}
+
+void __ast_sip_unregister_supplement(struct ast_sip_supplement *supplement,
+       const char *file, int line, const char *func)
+{
+       if (!internal_sip_unregister_supplement(supplement)) {
+               __ast_module_unref(ast_module_info->self, file, line, func);
+       }
 }
 
 static int send_in_dialog_request(pjsip_tx_data *tdata, struct pjsip_dialog *dlg)