Definitely lost is reported by test 2026: ovn -- 3 HVs, 1 LS, 3 lports/HV.
ds_put_char__ (dynamic-string.c:82)
ds_put_char (dynamic-string.h:88)
process_escape_args (process.c:103)
main (ovn-nbctl.c:92)
Another leak shown at ovn-sbctl.c with similar pattern.
Signed-off-by: William Tu <u9012...@gmail.com>
---
ovn/utilities/ovn-nbctl.c | 12 ++++++++----
ovn/utilities/ovn-sbctl.c | 12 ++++++++----
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c
index 5bdf757..81864c9 100644
--- a/ovn/utilities/ovn-nbctl.c
+++ b/ovn/utilities/ovn-nbctl.c
@@ -67,7 +67,7 @@ static void parse_options(int argc, char *argv[], struct
shash *local_options);
static const char *nbctl_default_db(void);
static void run_prerequisites(struct ctl_command[], size_t n_commands,
struct ovsdb_idl *);
-static void do_nbctl(const char *args, struct ctl_command *, size_t n,
+static int do_nbctl(const char *args, struct ctl_command *, size_t n,
struct ovsdb_idl *);
int
@@ -125,7 +125,10 @@ main(int argc, char *argv[])
if (seqno != ovsdb_idl_get_seqno(idl)) {
seqno = ovsdb_idl_get_seqno(idl);
- do_nbctl(args, commands, n_commands, idl);
+ if (do_nbctl(args, commands, n_commands, idl) == 0) {
+ free(args);
+ exit(EXIT_SUCCESS);
+ }
}
if (seqno == ovsdb_idl_get_seqno(idl)) {
@@ -1157,7 +1160,7 @@ run_prerequisites(struct ctl_command *commands, size_t
n_commands,
}
}
-static void
+static int
do_nbctl(const char *args, struct ctl_command *commands, size_t n_commands,
struct ovsdb_idl *idl)
{
@@ -1296,7 +1299,7 @@ do_nbctl(const char *args, struct ctl_command *commands,
size_t n_commands,
ovsdb_idl_txn_destroy(txn);
ovsdb_idl_destroy(idl);
- exit(EXIT_SUCCESS);
+ return 0;
try_again:
/* Our transaction needs to be rerun, or a prerequisite was not met. Free
@@ -1313,6 +1316,7 @@ try_again:
free(c->table);
}
free(error);
+ return 1;
}
/* Frees the current transaction and the underlying IDL and then calls
diff --git a/ovn/utilities/ovn-sbctl.c b/ovn/utilities/ovn-sbctl.c
index a888333..2a07ce5 100644
--- a/ovn/utilities/ovn-sbctl.c
+++ b/ovn/utilities/ovn-sbctl.c
@@ -81,7 +81,7 @@ static void parse_options(int argc, char *argv[], struct
shash *local_options);
static const char *sbctl_default_db(void);
static void run_prerequisites(struct ctl_command[], size_t n_commands,
struct ovsdb_idl *);
-static void do_sbctl(const char *args, struct ctl_command *, size_t n,
+static int do_sbctl(const char *args, struct ctl_command *, size_t n,
struct ovsdb_idl *);
int
@@ -138,7 +138,10 @@ main(int argc, char *argv[])
if (seqno != ovsdb_idl_get_seqno(idl)) {
seqno = ovsdb_idl_get_seqno(idl);
- do_sbctl(args, commands, n_commands, idl);
+ if (do_sbctl(args, commands, n_commands, idl) == 0) {
+ free(args);
+ exit(EXIT_SUCCESS);
+ }
}
if (seqno == ovsdb_idl_get_seqno(idl)) {
@@ -835,7 +838,7 @@ run_prerequisites(struct ctl_command *commands, size_t
n_commands,
}
}
-static void
+static int
do_sbctl(const char *args, struct ctl_command *commands, size_t n_commands,
struct ovsdb_idl *idl)
{
@@ -974,7 +977,7 @@ do_sbctl(const char *args, struct ctl_command *commands,
size_t n_commands,
ovsdb_idl_txn_destroy(txn);
ovsdb_idl_destroy(idl);
- exit(EXIT_SUCCESS);
+ return 0;
try_again:
/* Our transaction needs to be rerun, or a prerequisite was not met. Free
@@ -991,6 +994,7 @@ try_again:
free(c->table);
}
free(error);
+ return 1;
}
/* Frees the current transaction and the underlying IDL and then calls
--
2.5.0
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev