--- ProcessList.c.orig 2009-03-11 14:03:42.000000000 +0100 +++ ProcessList.c 2011-05-20 01:48:22.000000000 +0200 @@ -31,6 +31,11 @@ #include "debug.h" #include +#ifdef __FreeBSD__ +#include +#include +#endif + /*{ #ifndef PROCDIR #define PROCDIR "/proc" @@ -313,7 +318,7 @@ unsigned int pid = p->pid; int index = Vector_indexOf(this->processes, p, Process_pidCompare); assert(index != -1); - Vector_remove(this->processes, index); + if (index >= 0) Vector_remove(this->processes, index); assert(Hashtable_get(this->processTable, pid) == NULL); (void)pid; assert(Hashtable_count(this->processTable) == Vector_count(this->processes)); } @@ -730,7 +735,7 @@ void ProcessList_scan(ProcessList* this) { unsigned long long int usertime, nicetime, systemtime, systemalltime, idlealltime, idletime, totaltime; - unsigned long long int swapFree; + unsigned long long int swapFree = 0; FILE* status; char buffer[128]; @@ -766,6 +771,12 @@ } } + #ifdef __FreeBSD__ + size_t len = sizeof(this->freeMem); + if (!sysctlbyname("vm.stats.vm.v_free_count", &this->freeMem, &len, NULL, 0)) + this->freeMem *= getpagesize() / 1024; + #endif + this->usedMem = this->totalMem - this->freeMem; this->usedSwap = this->totalSwap - swapFree; fclose(status);