From 7ef28119d5984f5e29e07ba4102fc0b680c2a6c9 Mon Sep 17 00:00:00 2001 From: William Tu Date: Wed, 23 Dec 2015 10:58:15 -0800 Subject: [PATCH] ovsdb-server: Fix memory leak using perf counter without initialization. perf_counter_accumulate() is invoked without perf_counters_init() being called first, which leads to a memory leak reported by Valgrind (test cases 104, 106, and 107). A call trace is below: xmalloc (util.c:112) shash_add_nocopy__ (shash.c:109) shash_add_nocopy (shash.c:121) shash_add (shash.c:129) shash_add_once (shash.c:136) shash_add_assert (shash.c:146) perf_counter_init (perf-counter.c:86) perf_counter_accumulate (perf-counter.c:95) ovsdb_txn_commit (transaction.c:850) ovsdb_file_open__ (file.c:217) open_db (ovsdb-server.c:418) main (ovsdb-server.c:263) Signed-off-by: William Tu Signed-off-by: Daniele Di Proietto Co-authored-by: Daniele Di Proietto Signed-off-by: Ben Pfaff --- AUTHORS | 1 + ovsdb/ovsdb-server.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/AUTHORS b/AUTHORS index cc7aacc84..178060075 100644 --- a/AUTHORS +++ b/AUTHORS @@ -215,6 +215,7 @@ Wei Li liw@dtdream.com Wei Yongjun yjwei@cn.fujitsu.com Wenyu Zhang wenyuz@vmware.com William Fulton +William Tu u9012063@gmail.com YAMAMOTO Takashi yamamoto@midokura.com Yasuhito Takamiya yasuhito@gmail.com yinpeijun yinpeijun@huawei.com diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 25fa9c6bf..231ba2fb7 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -259,6 +259,9 @@ main(int argc, char *argv[]) shash_init(&all_dbs); server_config.all_dbs = &all_dbs; server_config.jsonrpc = jsonrpc; + + perf_counters_init(); + SSET_FOR_EACH (db_filename, &db_filenames) { error = open_db(&server_config, db_filename); if (error) { @@ -297,8 +300,6 @@ main(int argc, char *argv[]) daemonize_complete(); - perf_counters_init(); - if (!run_command) { /* ovsdb-server is usually a long-running process, in which case it * makes plenty of sense to log the version, but --run makes -- 2.20.1