/*===========================================================================* * thread_cleanup * *===========================================================================*/ static void thread_cleanup(struct fproc *rfp) { /* Clean up worker thread. Skip parts if this thread is not associated * with a particular process (i.e., rfp is NULL) */ #if LOCK_DEBUG if (rfp != NULL) { check_filp_locks_by_me(); check_vnode_locks_by_me(rfp); check_vmnt_locks_by_me(rfp); } #endif if (rfp != NULL && rfp->fp_flags & FP_PM_PENDING) { /* Postponed PM call */ job_m_in = rfp->fp_job.j_m_in; rfp->fp_flags &= ~FP_PM_PENDING; service_pm_postponed(); } #if LOCK_DEBUG if (rfp != NULL) { check_filp_locks_by_me(); check_vnode_locks_by_me(rfp); check_vmnt_locks_by_me(rfp); } #endif if (rfp != NULL) { rfp->fp_flags &= ~FP_DROP_WORK; unlock_proc(rfp); } }
/*===========================================================================* * thread_cleanup * *===========================================================================*/ void thread_cleanup(void) { /* Perform cleanup actions for a worker thread. */ #if LOCK_DEBUG check_filp_locks_by_me(); check_vnode_locks_by_me(fp); check_vmnt_locks_by_me(fp); #endif if (fp->fp_flags & FP_SRV_PROC) { struct vmnt *vmp; if ((vmp = find_vmnt(fp->fp_endpoint)) != NULL) { vmp->m_flags &= ~VMNT_CALLBACK; } } }