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

Function kern_setpriority

freebsd/kern/kern_resource.c:187–258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

185}
186
187int
188kern_setpriority(struct thread *td, int which, int who, int prio)
189{
190 struct proc *curp, *p;
191 struct pgrp *pg;
192 int found = 0, error = 0;
193
194 curp = td->td_proc;
195 switch (which) {
196 case PRIO_PROCESS:
197 if (who == 0) {
198 PROC_LOCK(curp);
199 error = donice(td, curp, prio);
200 PROC_UNLOCK(curp);
201 } else {
202 p = pfind(who);
203 if (p == NULL)
204 break;
205 error = p_cansee(td, p);
206 if (error == 0)
207 error = donice(td, p, prio);
208 PROC_UNLOCK(p);
209 }
210 found++;
211 break;
212
213 case PRIO_PGRP:
214 sx_slock(&proctree_lock);
215 if (who == 0) {
216 pg = curp->p_pgrp;
217 PGRP_LOCK(pg);
218 } else {
219 pg = pgfind(who);
220 if (pg == NULL) {
221 sx_sunlock(&proctree_lock);
222 break;
223 }
224 }
225 sx_sunlock(&proctree_lock);
226 LIST_FOREACH(p, &pg->pg_members, p_pglist) {
227 PROC_LOCK(p);
228 if (p->p_state == PRS_NORMAL &&
229 p_cansee(td, p) == 0) {
230 error = donice(td, p, prio);
231 found++;
232 }
233 PROC_UNLOCK(p);
234 }
235 PGRP_UNLOCK(pg);
236 break;
237
238 case PRIO_USER:
239 if (who == 0)
240 who = td->td_ucred->cr_uid;
241 sx_slock(&allproc_lock);
242 FOREACH_PROC_IN_SYSTEM(p) {
243 PROC_LOCK(p);
244 if (p->p_state == PRS_NORMAL &&

Callers 1

sys_setpriorityFunction · 0.85

Calls 4

doniceFunction · 0.85
pfindFunction · 0.70
p_canseeFunction · 0.70
pgfindFunction · 0.70

Tested by

no test coverage detected