CC=gcc
LD=ld
-CFLAGS=-Wall -O2 -g -fPIC
+CFLAGS=-Wall -O2 -g -fPIC -D_GNU_SOURCE
RRDD_OBJS= main.o process.o rrdtool.o parser.o built_in_parsers.o string.o \
debug.o config.o plugin_manager.o
all: rrdd $(ALL_PARSERS)
rrdd: $(RRDD_OBJS)
- $(QUIET_LINK)$(CC) -o rrdd $(RRDD_OBJS) -lconfig -ldl -rdynamic
+ $(QUIET_LINK)$(CC) -o rrdd $(RRDD_OBJS) -lconfig -ldl -rdynamic \
+ -lpthread
onewire_parser.so: $(ONEWIRE_PARSER_OBJS)
$(QUIET_LINK)$(CC) $(CFLAGS) -lownet -shared -fPIC $< -o $@
-#define _GNU_SOURCE
#include <unistd.h>
#include <fcntl.h>
#include <sys/select.h>
return 0;
}
+
+void _mutex_lock_acquired(struct mutex *lock, char *file, int line)
+{
+ lock->line = line;
+ lock->file = file;
+}
+
+int _mutex_lock(struct mutex *lock, char *file, int line)
+{
+ int ret = 0;
+
+ if (!pthread_mutex_trylock(&lock->lock))
+ goto out_lock;
+
+ pr_info("Lock contention on lock %s on %s:%d\n",
+ lock->name, lock->file, lock->line);
+
+ ret = pthread_mutex_lock(&lock->lock);
+ if (ret)
+ pr_err("Acquirin lock %s failed: %m, acquired %s:%d\n",
+ lock->name, lock->file, lock->line);
+
+out_lock:
+ _mutex_lock_acquired(lock, file, line);
+ return ret;
+}
+
+int _mutex_unlock(struct mutex *lock)
+{
+ lock->line = 0;
+ lock->file = NULL;
+ pthread_mutex_unlock(&lock->lock);
+
+ return 0;
+}
#include <error.h>
#include <errno.h>
#include <stdint.h>
+#include <pthread.h>
struct event_handler;
char *name;
};
+struct mutex {
+ pthread_mutex_t lock;
+ int line;
+ char *file;
+ time_t lock_time;
+ char *name;
+};
+
int register_event_handler(struct event_handler *handler);
int get_child_count(void);
int run_piped_stream(const char *cmd, char *const argv[],
FILE **stdinf, FILE **stdoutf, FILE **stderrf);
+void _mutex_lock_acquired(struct mutex *lock, char *file, int line);
+int _mutex_lock(struct mutex *lock, char *file, int line);
+int _mutex_unlock(struct mutex *lock);
+
+#define mutex_lock(lock) _mutex_lock(lock, __FILE__, __LINE__)
+#define mutex_unlock(lock) _mutex_unlock(lock)
+#define mutex_lock_acquired(lock) _mutex_lock_acquired(lock, __FILE__, __LINE__)
#endif