]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/commit
MFC r306441 and r306634:
authorhselasky <hselasky@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Mon, 10 Oct 2016 11:27:59 +0000 (11:27 +0000)
committerhselasky <hselasky@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Mon, 10 Oct 2016 11:27:59 +0000 (11:27 +0000)
commit2e7fb3dc0b72664aeb58ef104aba6d24a6103654
tree9a6071bc1fe6f56c6a5c129263397c15e677cfbb
parentf9e4c84d1e69755c532e43d7d328030192b3ef75
MFC r306441 and r306634:
While draining a timeout task prevent the taskqueue_enqueue_timeout()
function from restarting the timer.

Commonly taskqueue_enqueue_timeout() is called from within the task
function itself without any checks for teardown. Then it can happen
the timer stays active after the return of taskqueue_drain_timeout(),
because the timeout and task is drained separately.

This patch factors out the teardown flag into the timeout task itself,
allowing existing code to stay as-is instead of applying a teardown
flag to each and every of the timeout task consumers.

Add assert to taskqueue_drain_timeout() which prevents parallel
execution on the same timeout task.

Update manual page documenting the return value of
taskqueue_enqueue_timeout().

Differential Revision: https://reviews.freebsd.org/D8012
Reviewed by: kib, trasz

git-svn-id: svn://svn.freebsd.org/base/stable/9@306948 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
share/man/man9/taskqueue.9
sys/kern/subr_taskqueue.c