postgresql plugin: Do not open new connections during reinitialization.
[collectd.git] / src / postgresql.c
index 9438c57..90e9f5d 100644 (file)
@@ -244,6 +244,7 @@ static c_psql_database_t *c_psql_database_new (const char *name)
 static void c_psql_database_delete (c_psql_database_t *db)
 {
        PQfinish (db->conn);
+       db->conn = NULL;
 
        sfree (db->queries);
        db->queries_num = 0;
@@ -417,8 +418,10 @@ static int c_psql_exec_query (c_psql_database_t *db, int idx)
        }
 
        rows = PQntuples (res);
-       if (1 > rows)
+       if (1 > rows) {
+               PQclear (res);
                return 0;
+       }
 
        cols = PQnfields (res);
        if (query->cols_num != cols) {
@@ -442,6 +445,7 @@ static int c_psql_exec_query (c_psql_database_t *db, int idx)
                                submit_gauge (db, col.type, col.type_instance, value);
                }
        }
+       PQclear (res);
        return 0;
 } /* c_psql_exec_query */
 
@@ -546,6 +550,12 @@ static int c_psql_init (void)
 
                int j;
 
+               /* this will happen during reinitialization */
+               if (NULL != db->conn) {
+                       c_psql_check_connection (db);
+                       continue;
+               }
+
                status = ssnprintf (buf, buf_len, "dbname = '%s'", db->database);
                if (0 < status) {
                        buf     += status;