aboutsummaryrefslogtreecommitdiffstats
path: root/res/res_phoneprov.c
diff options
context:
space:
mode:
authortwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-04-05 07:58:42 +0000
committertwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-04-05 07:58:42 +0000
commitdd4ab250b11a8ce6f0a9dde77ce103698548d41f (patch)
tree1cf7f9b9215d620143aa3ba154f683935ec53ae1 /res/res_phoneprov.c
parentf103c6d1992fee7477f4797e8b27e5a04369df8c (diff)
Clean up some memory leak/ref counting issues
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@112939 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_phoneprov.c')
-rw-r--r--res/res_phoneprov.c65
1 files changed, 43 insertions, 22 deletions
diff --git a/res/res_phoneprov.c b/res/res_phoneprov.c
index f4272fbce..ea5ee9ffc 100644
--- a/res/res_phoneprov.c
+++ b/res/res_phoneprov.c
@@ -272,7 +272,7 @@ static void profile_destructor(void *obj)
while ((var = AST_LIST_REMOVE_HEAD(profile->headp, entries)))
ast_var_delete(var);
- free(profile->headp);
+ ast_free(profile->headp);
ast_string_field_free_memory(profile);
}
@@ -686,6 +686,8 @@ static struct extension *delete_extension(struct extension *exten)
ast_free(exten->headp);
ast_string_field_free_memory(exten);
+ ast_free(exten);
+
return NULL;
}
@@ -789,10 +791,11 @@ static void user_destructor(void *obj)
exten = delete_extension(exten);
}
- ast_string_field_free_memory(user);
if (user->profile) {
user->profile = unref_profile(user->profile);
}
+
+ ast_string_field_free_memory(user);
}
/*! \brief Delete all users */
@@ -968,30 +971,31 @@ static int set_config(void)
continue;
}
- if (!(profile = find_profile(tmp))) {
- ast_log(LOG_WARNING, "Could not look up profile '%s' - skipping.\n", tmp);
- continue;
- }
- if (!((user = find_user(mac)) || (user = build_user(mac, profile)))) {
- ast_log(LOG_WARNING, "Could not create user for '%s' - skipping\n", user->macaddress);
- continue;
- }
+ if (!(user = find_user(mac))) {
+ if (!(profile = find_profile(tmp))) {
+ ast_log(LOG_WARNING, "Could not look up profile '%s' - skipping.\n", tmp);
+ continue;
+ }
- if (!(exten = build_extension(cfg, cat))) {
- ast_log(LOG_WARNING, "Could not create extension for %s - skipping\n", user->macaddress);
- user = unref_user(user);
- continue;
- }
+ if (!(user = build_user(mac, profile))) {
+ ast_log(LOG_WARNING, "Could not create user for '%s' - skipping\n", user->macaddress);
+ continue;
+ }
- if (add_user_extension(user, exten)) {
- ast_log(LOG_WARNING, "Could not add extension '%s' to user '%s'\n", exten->name, user->macaddress);
- user = unref_user(user);
- exten = delete_extension(exten);
- continue;
- }
+ if (!(exten = build_extension(cfg, cat))) {
+ ast_log(LOG_WARNING, "Could not create extension for %s - skipping\n", user->macaddress);
+ user = unref_user(user);
+ continue;
+ }
+
+ if (add_user_extension(user, exten)) {
+ ast_log(LOG_WARNING, "Could not add extension '%s' to user '%s'\n", exten->name, user->macaddress);
+ user = unref_user(user);
+ exten = delete_extension(exten);
+ continue;
+ }
- if (!find_user(mac)) {
if (build_user_routes(user)) {
ast_log(LOG_WARNING, "Could not create http routes for %s - skipping\n", user->macaddress);
user = unref_user(user);
@@ -999,6 +1003,22 @@ static int set_config(void)
}
ao2_link(users, user);
+ user = unref_user(user);
+ } else {
+ if (!(exten = build_extension(cfg, cat))) {
+ ast_log(LOG_WARNING, "Could not create extension for %s - skipping\n", user->macaddress);
+ user = unref_user(user);
+ continue;
+ }
+
+ if (add_user_extension(user, exten)) {
+ ast_log(LOG_WARNING, "Could not add extension '%s' to user '%s'\n", exten->name, user->macaddress);
+ user = unref_user(user);
+ exten = delete_extension(exten);
+ continue;
+ }
+
+ user = unref_user(user);
}
}
@@ -1225,6 +1245,7 @@ static int unload_module(void)
delete_profiles();
ao2_ref(profiles, -1);
ao2_ref(http_routes, -1);
+ ao2_ref(users, -1);
while ((var = AST_LIST_REMOVE_HEAD(&global_variables, entries)))
ast_var_delete(var);