diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c index 205c2075d906abe5aadf5dce9243068c28a698f3..1d319911450f698018b562f75529a336c69b0207 100644 --- a/cdr/cdr_adaptive_odbc.c +++ b/cdr/cdr_adaptive_odbc.c @@ -663,7 +663,6 @@ early_release: static int unload_module(void) { ast_cdr_unregister(name); - usleep(1); if (AST_RWLIST_WRLOCK(&odbc_tables)) { ast_cdr_register(name, ast_module_info->description, odbc_log); ast_log(LOG_ERROR, "Unable to lock column list. Unload failed.\n"); diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c index 5e8e486730b9308e0142eaa08f2a8321b1cd349b..75fb0f854f3d05d957954654079296459d30dd71 100644 --- a/cdr/cdr_pgsql.c +++ b/cdr/cdr_pgsql.c @@ -331,10 +331,9 @@ static int pgsql_log(struct ast_cdr *cdr) static int unload_module(void) { struct columns *current; + ast_cdr_unregister(name); - /* Give all threads time to finish */ - usleep(1); PQfinish(conn); if (pghostname) diff --git a/main/cdr.c b/main/cdr.c index 3f7b9aee2f9effb1514653c83b9ada8e7ad1f27e..610c2ab3100f45778ef894d77b5d08ae3d4cfa6b 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -148,13 +148,16 @@ void ast_cdr_unregister(const char *name) AST_RWLIST_TRAVERSE_SAFE_BEGIN(&be_list, i, list) { if (!strcasecmp(name, i->name)) { AST_RWLIST_REMOVE_CURRENT(list); - ast_verb(2, "Unregistered '%s' CDR backend\n", name); - ast_free(i); break; } } AST_RWLIST_TRAVERSE_SAFE_END; AST_RWLIST_UNLOCK(&be_list); + + if (i) { + ast_verb(2, "Unregistered '%s' CDR backend\n", name); + ast_free(i); + } } int ast_cdr_isset_unanswered(void)