030e80957d
This can happen if an IKE_SA is terminated forcefully shortly before terminating the daemon. The thread that handles the terminate command will call checkin_and_destroy(), which unregisters the IKE_SA from the manager before destroying it. The main thread that calls flush() on the IKE_SA manager won't wait for this SA (its entry is already gone), so the processor and in turn the watcher job/thread might get canceled before the first thread started deleting the VIP. It would then wait indefinitely for a signal that can never be sent. There is still a small chance the thread hangs in wait() if the state check happens right before the watcher is canceled and it wasn't yet able to deliver the event from the kernel, we counter that by rechecking the state after a while. |
||
---|---|---|
.. | ||
suites | ||
.gitignore | ||
Makefile.am | ||
kernel_netlink_ipsec.c | ||
kernel_netlink_ipsec.h | ||
kernel_netlink_net.c | ||
kernel_netlink_net.h | ||
kernel_netlink_plugin.c | ||
kernel_netlink_plugin.h | ||
kernel_netlink_shared.c | ||
kernel_netlink_shared.h | ||
tests.c | ||
tests.h |