From: Nikos Ntarmos Date: Sun, 5 Dec 2010 03:57:38 +0000 (+0200) Subject: kvm_proc needs synchronized access X-Git-Url: http://vcs.maemo.org/git/?p=monky;a=commitdiff_plain;h=f607145f13fab35193defb1c5fab308796a429ef kvm_proc needs synchronized access Signed-off-by: Nikos Ntarmos Signed-off-by: Pavel Labath --- diff --git a/src/conky.c b/src/conky.c index 20f2f67..4015f24 100644 --- a/src/conky.c +++ b/src/conky.c @@ -5718,6 +5718,7 @@ void initialisation(int argc, char **argv) { "kvm_open")) == NULL) { CRIT_ERR(NULL, NULL, "cannot read kvm"); } + pthread_mutex_init(&kvm_proc_mutex, NULL); #endif while (1) { @@ -6001,6 +6002,7 @@ int main(int argc, char **argv) #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) kvm_close(kd); + pthread_mutex_destroy(&kvm_proc_mutex); #endif return 0; diff --git a/src/freebsd.c b/src/freebsd.c index a8cd8b1..b9426f4 100644 --- a/src/freebsd.c +++ b/src/freebsd.c @@ -266,7 +266,9 @@ int update_total_processes(void) { int n_processes; + pthread_mutex_lock(&kvm_proc_mutex); kvm_getprocs(kd, KERN_PROC_ALL, 0, &n_processes); + pthread_mutex_unlock(&kvm_proc_mutex); info.procs = n_processes; return 0; @@ -278,6 +280,7 @@ int update_running_processes(void) int n_processes; int i, cnt = 0; + pthread_mutex_lock(&kvm_proc_mutex); p = kvm_getprocs(kd, KERN_PROC_ALL, 0, &n_processes); for (i = 0; i < n_processes; i++) { #if (__FreeBSD__ < 5) && (__FreeBSD_kernel__ < 5) @@ -288,6 +291,7 @@ int update_running_processes(void) cnt++; } } + pthread_mutex_unlock(&kvm_proc_mutex); info.run_procs = cnt; return 0; @@ -748,6 +752,7 @@ proc_find_top(struct process **cpu, struct process **mem, struct process **time) CRIT_ERR(NULL, NULL, "Cannot read sysctl \"vm.stats.vm.v_page_count\""); } + pthread_mutex_lock(&kvm_proc_mutex); p = kvm_getprocs(kd, KERN_PROC_PROC, 0, &n_processes); processes = malloc(n_processes * sizeof(struct process)); @@ -764,6 +769,7 @@ proc_find_top(struct process **cpu, struct process **mem, struct process **time) j++; } } + pthread_mutex_unlock(&kvm_proc_mutex); qsort(processes, j - 1, sizeof(struct process), comparemem); for (i = 0; i < 10 && i < n_processes; i++) { diff --git a/src/freebsd.h b/src/freebsd.h index 063b131..7b3db6a 100644 --- a/src/freebsd.h +++ b/src/freebsd.h @@ -9,11 +9,13 @@ #include #include #include +#include #if (defined(i386) || defined(__i386__)) #include #endif /* i386 || __i386__ */ kvm_t *kd; +pthread_mutex_t kvm_proc_mutex; int get_entropy_avail(unsigned int *); int get_entropy_poolsize(unsigned int *);