diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-12-18 16:36:48 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-12-18 16:36:48 +0000 |
commit | 17d5723603d66983f3e3c74bee98e69ec72c2c63 (patch) | |
tree | 1a0a282659a9de695d80420b597056e5ae784c50 /res/res_odbc.c | |
parent | d4fe37f6bcbc6a279c9503cfaedfd84d55bc738c (diff) |
Fix reference counts of the class and add an assertion to the end.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@165541 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_odbc.c')
-rw-r--r-- | res/res_odbc.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/res/res_odbc.c b/res/res_odbc.c index 808867f84..8161fd3bf 100644 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -699,15 +699,19 @@ struct odbc_obj *ast_odbc_request_obj(const char *name, int check) ast_mutex_init(&obj->lock); /* obj inherits the outstanding reference to class */ obj->parent = class; + class = NULL; if (odbc_obj_connect(obj) == ODBC_FAIL) { ast_log(LOG_WARNING, "Failed to connect to %s\n", name); ao2_ref(obj, -1); obj = NULL; - class->count--; } else { obj->used = 1; ao2_link(class->obj_container, obj); } + } else { + /* Object is not constructed, so delete outstanding reference to class. */ + ao2_ref(class, -1); + class = NULL; } } else { /* Non-pooled connection: multiple modules can use the same connection. */ @@ -717,7 +721,11 @@ struct odbc_obj *ast_odbc_request_obj(const char *name, int check) break; } - if (!obj) { + if (obj) { + /* Object is not constructed, so delete outstanding reference to class. */ + ao2_ref(class, -1); + class = NULL; + } else { /* No entry: build one */ obj = ao2_alloc(sizeof(*obj), odbc_obj_destructor); if (!obj) { @@ -727,6 +735,7 @@ struct odbc_obj *ast_odbc_request_obj(const char *name, int check) ast_mutex_init(&obj->lock); /* obj inherits the outstanding reference to class */ obj->parent = class; + class = NULL; if (odbc_obj_connect(obj) == ODBC_FAIL) { ast_log(LOG_WARNING, "Failed to connect to %s\n", name); ao2_ref(obj, -1); @@ -749,8 +758,8 @@ struct odbc_obj *ast_odbc_request_obj(const char *name, int check) obj->lineno = lineno; } #endif + ast_assert(class == NULL); - ao2_ref(class, -1); return obj; } |