From 777a9f7d9ab835e9bcabc1c95d031fa190ad7b0f Mon Sep 17 00:00:00 2001 From: Andy Zhou Date: Tue, 16 Aug 2016 14:13:35 -0700 Subject: [PATCH] ovsdb: Properly handle error returned from from reset_database() Fix a memory leak in case of error. The error object was not properly disposed. Since the error to reset DB is not expected, log it and exit. Signed-off-by: Andy Zhou Acked-by: Ben Pfaff --- ovsdb/replication.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ovsdb/replication.c b/ovsdb/replication.c index de6eec1ec57..d3bc7c1bfe7 100644 --- a/ovsdb/replication.c +++ b/ovsdb/replication.c @@ -21,6 +21,7 @@ #include "condition.h" #include "openvswitch/json.h" +#include "openvswitch/vlog.h" #include "jsonrpc.h" #include "ovsdb.h" #include "ovsdb-error.h" @@ -32,6 +33,8 @@ #include "table.h" #include "transaction.h" +VLOG_DEFINE_THIS_MODULE(replication); + static char *active_ovsdb_server; static struct jsonrpc *rpc; static struct sset monitored_tables = SSET_INITIALIZER(&monitored_tables); @@ -88,12 +91,13 @@ replication_run(struct shash *all_dbs) /* Reset local databases. */ if (reset_dbs) { struct ovsdb_error *error = reset_databases(all_dbs); - if (!error) { - reset_dbs = false; + if (error) { + /* In case reset DB fails, log the error before exiting. */ + char *msg = ovsdb_error_to_string(error); + ovsdb_error_destroy(error); + VLOG_FATAL("Failed to reset DB (%s).", msg); } - /* In case of success reseting the databases, - * return in order to notify monitors. */ - return; + reset_dbs = false; } /* Open JSON-RPC. */