summaryrefslogtreecommitdiff
path: root/ovsdb
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2011-03-01 13:23:49 -0800
committerBen Pfaff <blp@nicira.com>2011-03-10 11:24:00 -0800
commit7f90cb0efe782cbbfb2557d81cf0f9de21e12435 (patch)
treeb7cff4bd067bd9ce5b9718cedb10688db64d676e /ovsdb
parenta8c37dc5a2e5f1abc914299ffb841109f2145c35 (diff)
downloadopenvswitch-7f90cb0efe782cbbfb2557d81cf0f9de21e12435.tar.gz
ovsdb: Don't count self-references in ovsdb_row's n_refs member.
The comment on the n_refs member of struct ovsdb_row says that it does not count references from a row to itself, but the code didn't implement this properly. This commit makes the code consistent with the comment. This does not actually affect any existing OVSDB behavior, because a row's reference count currently affects only whether it may be deleted, and references from a row to itself disappear when the row is deleted. But an upcoming commit will add new uses for a row's reference count, so at that point it becomes important.
Diffstat (limited to 'ovsdb')
-rw-r--r--ovsdb/transaction.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/ovsdb/transaction.c b/ovsdb/transaction.c
index f67018b82..615c164b2 100644
--- a/ovsdb/transaction.c
+++ b/ovsdb/transaction.c
@@ -176,6 +176,10 @@ ovsdb_txn_adjust_atom_refs(struct ovsdb_txn *txn, const struct ovsdb_row *r,
for (i = 0; i < n; i++) {
const struct uuid *uuid = &atoms[i].uuid;
struct ovsdb_txn_row *txn_row = find_txn_row(table, uuid);
+ if (uuid_equals(uuid, ovsdb_row_get_uuid(r))) {
+ /* Self-references don't count. */
+ continue;
+ }
if (!txn_row) {
const struct ovsdb_row *row = ovsdb_table_get_row(table, uuid);
if (row) {