Index: res/res_odbc.c =================================================================== --- res/res_odbc.c (revision 196272) +++ res/res_odbc.c (working copy) @@ -48,6 +48,7 @@ #include "asterisk/lock.h" #include "asterisk/res_odbc.h" #include "asterisk/time.h" +#define REF_DEBUG #include "asterisk/astobj2.h" #include "asterisk/app.h" #include "asterisk/strings.h" @@ -1031,6 +1032,21 @@ obj->txf->obj = NULL; obj->txf = release_transaction(obj->txf); } + + /* Safeguard container */ + if (ao2_ref(obj, 0) == 1) { + ao2_ref(obj, 1); /* Now 2 */ + ao2_unlink(obj->parent->obj_container, obj); + if (ao2_ref(obj, 0) == 1) { + ast_log(LOG_ERROR, "Reference counts incorrect! Unlinking database object from container as a safeguard.\n"); + ast_backtrace(); + ao2_ref(obj, -1); /* Destroyed */ + return; + } + /* This else case could happen naturally if the object is used past a reload */ + ao2_ref(obj, -1); /* Now 1 */ + } + ao2_ref(obj, -1); }