rculist: Remove postponed poisoning.
authorJarno Rajahalme <jrajahalme@nicira.com>
Fri, 12 Jun 2015 00:28:37 +0000 (17:28 -0700)
committerJarno Rajahalme <jrajahalme@nicira.com>
Fri, 12 Jun 2015 00:28:37 +0000 (17:28 -0700)
commit2541d75983cb6a48f0303ab96ec2a1be1b0ccbe7
treeab6202280f3fd777550842c8c82df414617d18d5
parente815de429c66a6c73d0605e36bf9be4eeec785ce
rculist: Remove postponed poisoning.

Postponed 'next' member poisoning was based on the faulty assumption
that postponed functions would be called in the order they were
postponed.  This assumption holds only for the functions postponed by
any single thread.  When functions are postponed by different
threads, there are no guarantees of the order in which the functions
may be called, or timing between those calls after the next grace
period has passed.

Given this, the postponed poisoning could have executed after
postponed destruction of the object containing the rculist element.

This bug was revealed after the memory leaks on rule deletion were
recently fixed.

This patch removes the postponed 'next' member poisoning and adds
documentation describing the ordering limitations in OVS RCU.

Alex Wang dug out the root cause of the resulting crashes, thanks!

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Acked-by: Alex Wang <alexw@nicira.com>
lib/automake.mk
lib/classifier.c
lib/ovs-rcu.c
lib/ovs-rcu.h
lib/rculist.c [deleted file]
lib/rculist.h