MCPcopy Create free account
hub / github.com/F-Stack/f-stack / resume_all_proc

Function resume_all_proc

freebsd/kern/kern_proc.c:3301–3336  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3299}
3300
3301void
3302resume_all_proc(void)
3303{
3304 struct proc *cp, *p;
3305
3306 cp = curproc;
3307 sx_xlock(&allproc_lock);
3308again:
3309 LIST_REMOVE(cp, p_list);
3310 LIST_INSERT_HEAD(&allproc, cp, p_list);
3311 for (;;) {
3312 p = LIST_NEXT(cp, p_list);
3313 if (p == NULL)
3314 break;
3315 LIST_REMOVE(cp, p_list);
3316 LIST_INSERT_AFTER(p, cp, p_list);
3317 PROC_LOCK(p);
3318 if ((p->p_flag & P_TOTAL_STOP) != 0) {
3319 sx_xunlock(&allproc_lock);
3320 _PHOLD(p);
3321 thread_single_end(p, SINGLE_ALLPROC);
3322 _PRELE(p);
3323 PROC_UNLOCK(p);
3324 sx_xlock(&allproc_lock);
3325 } else {
3326 PROC_UNLOCK(p);
3327 }
3328 }
3329 /* Did the loop above missed any stopped process ? */
3330 FOREACH_PROC_IN_SYSTEM(p) {
3331 /* No need for proc lock. */
3332 if ((p->p_flag & P_TOTAL_STOP) != 0)
3333 goto again;
3334 }
3335 sx_xunlock(&allproc_lock);
3336}
3337
3338/* #define TOTAL_STOP_DEBUG 1 */
3339#ifdef TOTAL_STOP_DEBUG

Callers 1

Calls 1

thread_single_endFunction · 0.85

Tested by

no test coverage detected