From: Ben Pfaff Date: Tue, 1 Mar 2011 21:23:49 +0000 (-0800) Subject: ovsdb: Don't count self-references in ovsdb_row's n_refs member. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f90cb0efe782cbbfb2557d81cf0f9de21e12435;p=openvswitch 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. --- diff --git a/ovsdb/transaction.c b/ovsdb/transaction.c index f67018b8..615c164b 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) {