diff options
author | zec <zec@FreeBSD.org> | 2009-08-28 22:30:55 +0000 |
---|---|---|
committer | zec <zec@FreeBSD.org> | 2009-08-28 22:30:55 +0000 |
commit | 9940277b0b89316256a4ba3df75a0b17de8b7157 (patch) | |
tree | 2bf95bbc3a45eda300604eead9e0e66de186639f /bin/sh | |
parent | 7b069e86c6dbd397d4d622acf8c924f2ade8127d (diff) | |
download | FreeBSD-src-9940277b0b89316256a4ba3df75a0b17de8b7157.zip FreeBSD-src-9940277b0b89316256a4ba3df75a0b17de8b7157.tar.gz |
Introduce a separate sx lock for protecting lists of vnet sysinit
and sysuninit handlers.
Previously, sx_vnet, which is a lock designated for protecting
the vnet list, was (ab)used for protecting vnet sysinit / sysuninit
handler lists as well. Holding exclusively the sx_vnet lock while
invoking sysinit and / or sysuninit handlers turned out to be
problematic, since some of the handlers may attempt to wake up
another thread and wait for it to walk over the vnet list, hence
acquire a shared lock on sx_vnet, which in turn leads to a deadlock.
Protecting vnet sysinit / sysuninit lists with a separate lock
mitigates this issue, which was first observed with
flowtable_flush() / flowtable_cleaner() in sys/net/flowtable.c.
Reviewed by: rwatson, jhb
MFC after: 3 days
Diffstat (limited to 'bin/sh')
0 files changed, 0 insertions, 0 deletions