summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>2015-01-04 19:55:44 +0000
committergibbs <gibbs@FreeBSD.org>2015-01-04 19:55:44 +0000
commit7646916ff089c355a68002d03e370cbee7257a36 (patch)
tree2544a011500870de18dccea5ae7774609f97951e /sbin
parent8c983408f92d71a82eab4da6311e4a9133158247 (diff)
downloadFreeBSD-src-7646916ff089c355a68002d03e370cbee7257a36.zip
FreeBSD-src-7646916ff089c355a68002d03e370cbee7257a36.tar.gz
Prevent live-lock and access of destroyed data in taskqueue_drain_all().
Phabric: https://reviews.freebsd.org/D1247 Reviewed by: jhb, avg Sponsored by: Spectra Logic Corporation sys/kern_subr_taskqueue.c: Modify taskqueue_drain_all() processing to use a temporary "barrier task", rather than rely on a user task that may be destroyed during taskqueue_drain_all()'s execution. The barrier task is queued behind all previously queued tasks and then has its priority elevated so that future tasks cannot pass it in the queue. Use a similar barrier scheme to drain threads processing current tasks. This requires taskqueue_run_locked() to insert and remove the taskqueue_busy object for the running thread for every task processed. share/man/man9/taskqueue.9: Remove warning about live-lock issues with taskqueue_drain_all() and indicate that it does not wait for tasks queued after it begins processing.
Diffstat (limited to 'sbin')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud