Lines Matching refs:proc
52 Process *proc = (Process *)Slab_Alloc(&processSlab);
54 if (!proc)
57 memset(proc, 0, sizeof(*proc));
59 proc->pid = nextProcessID++;
60 proc->threads = 0;
61 proc->refCount = 1;
62 proc->procState = PROC_STATE_NULL;
63 TAILQ_INIT(&proc->threadList);
66 strncpy((char *)&proc->title, title, PROCESS_TITLE_LENGTH);
68 proc->title[0] = '\0';
71 proc->space = PMap_NewAS();
72 if (proc->space == NULL) {
73 Slab_Free(&processSlab, proc);
76 proc->ustackNext = MEM_USERSPACE_STKBASE;
78 Spinlock_Init(&proc->lock, "Process Lock", SPINLOCK_TYPE_NORMAL);
80 Semaphore_Init(&proc->zombieSemaphore, 0, "Zombie Semaphore");
81 TAILQ_INIT(&proc->zombieQueue);
83 Handle_Init(proc);
85 proc->parent = parent;
88 TAILQ_INSERT_TAIL(&parent->childrenList, proc, siblingList);
91 TAILQ_INIT(&proc->childrenList);
92 TAILQ_INIT(&proc->zombieProc);
93 Mutex_Init(&proc->zombieProcLock, "Zombie Process Lock");
94 CV_Init(&proc->zombieProcCV, "Zombie Process CV");
95 CV_Init(&proc->zombieProcPCV, "Zombie Process PCV");
98 TAILQ_INSERT_TAIL(&processList, proc, processList);
101 return proc;
110 * @param [in] proc Process to destroy.
113 Process_Destroy(Process *proc)
115 Handle_Destroy(proc);
117 Spinlock_Destroy(&proc->lock);
118 Semaphore_Destroy(&proc->zombieSemaphore);
119 CV_Destroy(&proc->zombieProcPCV);
120 CV_Destroy(&proc->zombieProcCV);
121 Mutex_Destroy(&proc->zombieProcLock);
122 PMap_DestroyAS(proc->space);
128 TAILQ_REMOVE(&processList, proc, processList);
131 Slab_Free(&processSlab, proc);
148 Process *proc = NULL;
154 proc = p;
160 return proc;
168 * @param proc Process to retain a reference to.
171 Process_Retain(Process *proc)
173 ASSERT(proc->refCount != 0);
174 __sync_fetch_and_add(&proc->refCount, 1);
182 * @param proc Process to release a reference of.
185 Process_Release(Process *proc)
187 ASSERT(proc->refCount != 0);
188 if (__sync_fetch_and_sub(&proc->refCount, 1) == 1) {
189 Process_Destroy(proc);
199 * @param [in] proc Parent process.
206 Process_Wait(Process *proc, uint64_t pid)
227 Spinlock_Lock(&proc->lock);
231 Spinlock_Unlock(&proc->lock);
233 ASSERT(thr->proc->pid != 1);
236 Spinlock_Lock(&proc->lock);
238 Spinlock_Unlock(&proc->lock);
251 Process_Dump(Process *proc)
259 kprintf("title %s\n", proc->title);
260 kprintf("pid %llu\n", proc->pid);
261 kprintf("state %s\n", stateStrings[proc->procState]);
262 kprintf("space %016llx\n", proc->space);
263 kprintf("threads %llu\n", proc->threads);
264 kprintf("refCount %d\n", proc->refCount);
265 kprintf("nextFD %llu\n", proc->nextFD);
271 Process *proc;
279 TAILQ_FOREACH(proc, &processList, processList)
281 kprintf("Process: %d(%016llx)\n", proc->pid, proc);
282 Process_Dump(proc);
296 Process_Dump(thr->proc);