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

Function kern_getpriority

freebsd/kern/kern_resource.c:98–166  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

96}
97
98int
99kern_getpriority(struct thread *td, int which, int who)
100{
101 struct proc *p;
102 struct pgrp *pg;
103 int error, low;
104
105 error = 0;
106 low = PRIO_MAX + 1;
107 switch (which) {
108 case PRIO_PROCESS:
109 if (who == 0)
110 low = td->td_proc->p_nice;
111 else {
112 p = pfind(who);
113 if (p == NULL)
114 break;
115 if (p_cansee(td, p) == 0)
116 low = p->p_nice;
117 PROC_UNLOCK(p);
118 }
119 break;
120
121 case PRIO_PGRP:
122 sx_slock(&proctree_lock);
123 if (who == 0) {
124 pg = td->td_proc->p_pgrp;
125 PGRP_LOCK(pg);
126 } else {
127 pg = pgfind(who);
128 if (pg == NULL) {
129 sx_sunlock(&proctree_lock);
130 break;
131 }
132 }
133 sx_sunlock(&proctree_lock);
134 LIST_FOREACH(p, &pg->pg_members, p_pglist) {
135 PROC_LOCK(p);
136 if (p->p_state == PRS_NORMAL &&
137 p_cansee(td, p) == 0) {
138 if (p->p_nice < low)
139 low = p->p_nice;
140 }
141 PROC_UNLOCK(p);
142 }
143 PGRP_UNLOCK(pg);
144 break;
145
146 case PRIO_USER:
147 if (who == 0)
148 who = td->td_ucred->cr_uid;
149 sx_slock(&allproc_lock);
150 FOREACH_PROC_IN_SYSTEM(p) {
151 PROC_LOCK(p);
152 if (p->p_state == PRS_NORMAL &&
153 p_cansee(td, p) == 0 &&
154 p->p_ucred->cr_uid == who) {
155 if (p->p_nice < low)

Callers 1

sys_getpriorityFunction · 0.85

Calls 3

pfindFunction · 0.70
p_canseeFunction · 0.70
pgfindFunction · 0.70

Tested by

no test coverage detected