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().