mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-11-15 17:47:09 +00:00
Fix race condition in update_stat()
This commit is contained in:
parent
443c2d12ca
commit
3ed13c3cd1
@ -63,6 +63,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <linux/route.h>
|
#include <linux/route.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
/* The following ifdefs were adapted from gkrellm */
|
/* The following ifdefs were adapted from gkrellm */
|
||||||
#include <linux/major.h>
|
#include <linux/major.h>
|
||||||
@ -672,14 +673,20 @@ void update_stat(void)
|
|||||||
const char *stat_template = NULL;
|
const char *stat_template = NULL;
|
||||||
unsigned int malloc_cpu_size = 0;
|
unsigned int malloc_cpu_size = 0;
|
||||||
extern void* global_cpu;
|
extern void* global_cpu;
|
||||||
|
|
||||||
|
static pthread_mutex_t last_stat_update_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
static double last_stat_update = 0.0;
|
static double last_stat_update = 0.0;
|
||||||
|
|
||||||
/* since we use wrappers for this function, the update machinery
|
/* since we use wrappers for this function, the update machinery
|
||||||
* can't eliminate double invocations of this function. Check for
|
* can't eliminate double invocations of this function. Check for
|
||||||
* them here, otherwise cpu_usage counters are freaking out. */
|
* them here, otherwise cpu_usage counters are freaking out. */
|
||||||
if (last_stat_update == current_update_time)
|
pthread_mutex_lock(&last_stat_update_mutex);
|
||||||
|
if (last_stat_update == current_update_time) {
|
||||||
|
pthread_mutex_unlock(&last_stat_update_mutex);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
last_stat_update = current_update_time;
|
last_stat_update = current_update_time;
|
||||||
|
pthread_mutex_unlock(&last_stat_update_mutex);
|
||||||
|
|
||||||
/* add check for !info.cpu_usage since that mem is freed on a SIGUSR1 */
|
/* add check for !info.cpu_usage since that mem is freed on a SIGUSR1 */
|
||||||
if (!cpu_setup || !info.cpu_usage) {
|
if (!cpu_setup || !info.cpu_usage) {
|
||||||
|
Loading…
Reference in New Issue
Block a user