git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
bond: Reference count 'struct bond'.
[sliver-openvswitch.git]
/
lib
/
bond.c
diff --git
a/lib/bond.c
b/lib/bond.c
index
68ac068
..
1136315
100644
(file)
--- a/
lib/bond.c
+++ b/
lib/bond.c
@@
-108,6
+108,8
@@
struct bond {
* where we can't otherwise provide revalidation feedback to the client.
* That's only unixctl commands now; I hope no other cases will arise. */
struct tag_set unixctl_tags;
* where we can't otherwise provide revalidation feedback to the client.
* That's only unixctl commands now; I hope no other cases will arise. */
struct tag_set unixctl_tags;
+
+ int ref_cnt;
};
static struct hmap all_bonds = HMAP_INITIALIZER(&all_bonds);
};
static struct hmap all_bonds = HMAP_INITIALIZER(&all_bonds);
@@
-179,6
+181,7
@@
bond_create(const struct bond_settings *s)
hmap_init(&bond->slaves);
bond->no_slaves_tag = tag_create_random();
bond->next_fake_iface_update = LLONG_MAX;
hmap_init(&bond->slaves);
bond->no_slaves_tag = tag_create_random();
bond->next_fake_iface_update = LLONG_MAX;
+ bond->ref_cnt = 1;
bond_reconfigure(bond, s);
bond_reconfigure(bond, s);
@@
-187,9
+190,19
@@
bond_create(const struct bond_settings *s)
return bond;
}
return bond;
}
+struct bond *
+bond_ref(const struct bond *bond_)
+{
+ struct bond *bond = CONST_CAST(struct bond *, bond_);
+
+ ovs_assert(bond->ref_cnt > 0);
+ bond->ref_cnt++;
+ return bond;
+}
+
/* Frees 'bond'. */
void
/* Frees 'bond'. */
void
-bond_
destroy
(struct bond *bond)
+bond_
unref
(struct bond *bond)
{
struct bond_slave *slave, *next_slave;
{
struct bond_slave *slave, *next_slave;
@@
-197,6
+210,11
@@
bond_destroy(struct bond *bond)
return;
}
return;
}
+ ovs_assert(bond->ref_cnt > 0);
+ if (--bond->ref_cnt) {
+ return;
+ }
+
hmap_remove(&all_bonds, &bond->hmap_node);
HMAP_FOR_EACH_SAFE (slave, next_slave, hmap_node, &bond->slaves) {
hmap_remove(&all_bonds, &bond->hmap_node);
HMAP_FOR_EACH_SAFE (slave, next_slave, hmap_node, &bond->slaves) {