summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/ulogd/db.h2
-rw-r--r--util/db.c9
2 files changed, 9 insertions, 2 deletions
diff --git a/include/ulogd/db.h b/include/ulogd/db.h
index 94cdbcb..62819f2 100644
--- a/include/ulogd/db.h
+++ b/include/ulogd/db.h
@@ -23,6 +23,7 @@ struct db_instance {
struct db_driver *driver;
};
#define TIME_ERR ((time_t)-1) /* Be paranoid */
+#define RECONNECT_DEFAULT 2
#define DB_CES \
{ \
@@ -33,6 +34,7 @@ struct db_instance {
{ \
.key = "reconnect", \
.type = CONFIG_TYPE_INT, \
+ .u.value = RECONNECT_DEFAULT, \
}, \
{ \
.key = "ip_as_string", \
diff --git a/util/db.c b/util/db.c
index 49f6c29..b9ca8db 100644
--- a/util/db.c
+++ b/util/db.c
@@ -176,6 +176,8 @@ static int _init_reconnect(struct ulogd_pluginstance *upi)
struct db_instance *di = (struct db_instance *) upi->private;
if (reconnect_ce(upi->config_kset).u.value) {
+ if (time(NULL) < di->reconnect)
+ return -1;
di->reconnect = time(NULL);
if (di->reconnect != TIME_ERR) {
ulogd_log(ULOGD_ERROR, "no connection to database, "
@@ -312,8 +314,11 @@ static int __interp_db(struct ulogd_pluginstance *upi)
/* now we have created our statement, insert it */
- if (di->driver->execute(upi, di->stmt, strlen(di->stmt)) < 0)
- return _init_db(upi);
+ if (di->driver->execute(upi, di->stmt, strlen(di->stmt)) < 0) {
+ /* error occur, database connexion need to be closed */
+ di->driver->close_db(upi);
+ return _init_reconnect(upi);
+ }
return 0;
}