trap-manager: Resolve race conditions between flush() and install()
authorTobias Brunner <tobias@strongswan.org>
Mon, 13 Jul 2015 11:20:14 +0000 (13:20 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 27 Jul 2015 11:50:19 +0000 (13:50 +0200)
commit12b3cdba7689113558f58a5265827f3086852bae
treeda0e00d5a4720be1cafb5a2d41c631082c822605
parenta229bdce625338117966a53efd0475b2c7c84566
trap-manager: Resolve race conditions between flush() and install()

When flush() is called there might be threads in install() waiting for
trap policies to get installed (without holding the lock).  We have to
wait until they updated the entries with the respective CHILD_SAs before
destroying the list.

We also have to prevent further trap policy installations (and wait until
threads in install() are really finished), otherwise we might end up
destroying CHILD_SA objects after the kernel interface implementations
have already been unloaded (avoiding this is the whole point of calling
flush() before unloading the plugins).
src/libcharon/sa/trap_manager.c