ovsdb: Don't count self-references in ovsdb_row's n_refs member.
authorBen Pfaff <blp@nicira.com>
Tue, 1 Mar 2011 21:23:49 +0000 (13:23 -0800)
committerBen Pfaff <blp@nicira.com>
Thu, 10 Mar 2011 19:24:00 +0000 (11:24 -0800)
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.

ovsdb/transaction.c

index f67018b82964973fbde9ca374fc723281bdbd581..615c164b2f400dbb886c69046d22daace5c6b689 100644 (file)
@@ -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) {