--- /tmp/asterisk-1.6.0.26/cdr/cdr_pgsql.c 2009-08-10 21:25:03.000000000 +0200 +++ asterisk-1.6.0.26/cdr/cdr_pgsql.c 2010-03-17 15:53:23.000000000 +0100 @@ -106,6 +106,8 @@ } \ } while (0) +static int config_module(int reload); + static int pgsql_log(struct ast_cdr *cdr) { struct ast_tm tm; @@ -118,6 +120,10 @@ conn = PQsetdbLogin(pghostname, pgdbport, NULL, NULL, pgdbname, pgdbuser, pgpassword); if (PQstatus(conn) != CONNECTION_BAD) { connected = 1; + if (AST_RWLIST_EMPTY(&psql_columns)) { + ast_log(LOG_ERROR, "cdr_pgsql: pgsql_columns not loaded, try reload !\n", pghostname); + config_module(0); /* reload the list du to problems during init */ + } } else { pgerror = PQerrorMessage(conn); ast_log(LOG_ERROR, "cdr_pgsql: Unable to connect to database server %s. Calls will not be logged!\n", pghostname); @@ -470,7 +476,13 @@ ast_debug(1, "cdr_pgsql: got password of %s\n", pgpassword); ast_debug(1, "cdr_pgsql: got sql table name of %s\n", table); } - + + + if (conn != NULL) { /* in case of a reload close the connection completely */ + PQfinish(conn); + conn = NULL; + ast_log(LOG_WARNING,"cdr_pgsql: Databaces cloesed during reload\n"); + } conn = PQsetdbLogin(pghostname, pgdbport, NULL, NULL, pgdbname, pgdbuser, pgpassword); if (PQstatus(conn) != CONNECTION_BAD) { char sqlcmd[512];