OVN unit tests highlight this:
ERROR: LeakSanitizer: detected memory leaks
Direct leak of 1344 byte(s) in 1 object(s) allocated from:
0 0x4db0b7 in calloc (ovsdb/ovsdb-server+0x4db0b7)
1 0x5c2162 in xcalloc__ lib/util.c:124:31
2 0x5c221c in xcalloc lib/util.c:161:12
3 0x54afbc in ovsdb_condition_diff ovsdb/condition.c:527:21
4 0x529da6 in ovsdb_monitor_table_condition_update ovsdb/monitor.c:824:5
5 0x524fa4 in ovsdb_jsonrpc_parse_monitor_cond_change_request
ovsdb/jsonrpc-server.c:1557:13
6 0x5235c3 in ovsdb_jsonrpc_monitor_cond_change
ovsdb/jsonrpc-server.c:1624:25
7 0x5217f2 in ovsdb_jsonrpc_session_got_request
ovsdb/jsonrpc-server.c:1034:17
8 0x520ee6 in ovsdb_jsonrpc_session_run ovsdb/jsonrpc-server.c:572:17
9 0x51ffbe in ovsdb_jsonrpc_session_run_all ovsdb/jsonrpc-server.c:602:21
10 0x51fbcf in ovsdb_jsonrpc_server_run ovsdb/jsonrpc-server.c:417:9
11 0x517550 in main_loop ovsdb/ovsdb-server.c:224:9
12 0x512e80 in main ovsdb/ovsdb-server.c:507:5
13 0x7f9ecf675b74 in __libc_start_main (/lib64/libc.so.6+0x27b74)
Fixes: ef1da757f016 ("ovsdb: condition: Process condition changes
incrementally.")
Signed-off-by: Xavier Simonart <[email protected]>
---
v2: addressed comments from Ilya.
---
ovsdb/condition.c | 11 ++++++++---
ovsdb/monitor.c | 1 +
tests/ovsdb-monitor.at | 1 +
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/ovsdb/condition.c b/ovsdb/condition.c
index 5a3eb4e8a..4911fbf59 100644
--- a/ovsdb/condition.c
+++ b/ovsdb/condition.c
@@ -550,9 +550,14 @@ ovsdb_condition_diff(struct ovsdb_condition *diff,
&b->clauses[j]);
}
- diff->optimized = a->optimized && b->optimized;
- if (diff->optimized) {
- ovsdb_condition_optimize(diff);
+ if (diff->n_clauses) {
+ diff->optimized = a->optimized && b->optimized;
+ if (diff->optimized) {
+ ovsdb_condition_optimize(diff);
+ }
+ } else {
+ free(diff->clauses);
+ diff->clauses = NULL;
}
}
diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c
index 9829cd39c..9855f45d3 100644
--- a/ovsdb/monitor.c
+++ b/ovsdb/monitor.c
@@ -821,6 +821,7 @@ ovsdb_monitor_table_condition_update(
ovsdb_condition_destroy(&mtc->new_condition);
ovsdb_condition_clone(&mtc->new_condition, &cond);
ovsdb_condition_destroy(&cond);
+ ovsdb_condition_destroy(&mtc->diff_condition);
ovsdb_condition_diff(&mtc->diff_condition,
&mtc->old_condition, &mtc->new_condition);
ovsdb_monitor_condition_add_columns(dbmon,
diff --git a/tests/ovsdb-monitor.at b/tests/ovsdb-monitor.at
index 12cd2bc31..3e1df18a1 100644
--- a/tests/ovsdb-monitor.at
+++ b/tests/ovsdb-monitor.at
@@ -586,6 +586,7 @@ row,action,name,number,_version
[[]],
[],
[[[[["name","==","one"],["name","==","two"]]]],
+ [[[["name","==","two"],["name","==","one"]]]],
[[[["name","==","one"]]]],
[[[false]]],
[[[true]]]])
--
2.31.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev