summaryrefslogtreecommitdiffstats
path: root/ProcessList.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2015-03-16 23:01:48 -0300
committerHisham Muhammad <hisham@gobolinux.org>2015-03-16 23:02:03 -0300
commit272e2d9b3459ceb3fe2f5ae34a07e44df6c45997 (patch)
treeb7a7c2c68c3ebbe3b91f23a86da73ac352910cf5 /ProcessList.c
parent9ff5d2b243472ae73d10dafdd7c0e24dc5052f6d (diff)
Major advances in FreeBSD port.
Diffstat (limited to 'ProcessList.c')
-rw-r--r--ProcessList.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/ProcessList.c b/ProcessList.c
index 953c0e30..229e370d 100644
--- a/ProcessList.c
+++ b/ProcessList.c
@@ -49,6 +49,11 @@ typedef struct ProcessList_ {
bool topologyOk;
#endif
+ int totalTasks;
+ int runningTasks;
+ int userlandThreads;
+ int kernelThreads;
+
unsigned long long int totalMem;
unsigned long long int usedMem;
unsigned long long int freeMem;
@@ -65,7 +70,7 @@ typedef struct ProcessList_ {
ProcessList* ProcessList_new(UsersTable* ut, Hashtable* pidWhiteList, uid_t userId);
void ProcessList_delete(ProcessList* pl);
-void ProcessList_scan(ProcessList* pl);
+void ProcessList_goThroughEntries(ProcessList* pl);
}*/
@@ -282,3 +287,40 @@ void ProcessList_rebuildPanel(ProcessList* this) {
}
}
+Process* ProcessList_getProcess(ProcessList* this, pid_t pid, bool* preExisting, Process_new_fn constructor) {
+ Process* proc = (Process*) Hashtable_get(this->processTable, pid);
+ *preExisting = proc;
+ if (proc) {
+ assert(Vector_indexOf(this->processes, proc, Process_pidCompare) != -1);
+ assert(proc->pid == pid);
+ } else {
+ proc = constructor(this->settings);
+ assert(proc->comm == NULL);
+ proc->pid = pid;
+ }
+ return proc;
+}
+
+void ProcessList_scan(ProcessList* this) {
+
+ // mark all process as "dirty"
+ for (int i = 0; i < Vector_size(this->processes); i++) {
+ Process* p = (Process*) Vector_get(this->processes, i);
+ p->updated = false;
+ }
+
+ this->totalTasks = 0;
+ this->userlandThreads = 0;
+ this->kernelThreads = 0;
+ this->runningTasks = 0;
+
+ ProcessList_goThroughEntries(this);
+
+ for (int i = Vector_size(this->processes) - 1; i >= 0; i--) {
+ Process* p = (Process*) Vector_get(this->processes, i);
+ if (p->updated == false)
+ ProcessList_remove(this, p);
+ else
+ p->updated = false;
+ }
+}

© 2014-2024 Faster IT GmbH | imprint | privacy policy