instrument X using gcc's -finstrument-functions
used to debug locking
This commit is contained in:
@@ -10,6 +10,9 @@ gui.a: $(OBJS)
|
||||
test: test.o gui.a
|
||||
$(CC) -o test $(OBJS) test.o -lX11 -pthread -lm
|
||||
|
||||
x.o:x.c
|
||||
$(CC) $(CFLAGS) -o $@ -c $< -finstrument-functions
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -o $@ -c $<
|
||||
|
||||
|
||||
@@ -5,15 +5,31 @@
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
|
||||
static volatile int locked = 0;
|
||||
|
||||
void __cyg_profile_func_enter (void *func, void *caller)
|
||||
{
|
||||
if (locked == 0) abort();
|
||||
printf("E %p %p %lu\n", func, caller, time(NULL));
|
||||
}
|
||||
|
||||
void __cyg_profile_func_exit (void *func, void *caller)
|
||||
{
|
||||
if (locked == 0) abort();
|
||||
printf("X %p %p %lu\n", func, caller, time(NULL));
|
||||
}
|
||||
|
||||
void glock(gui *_gui)
|
||||
{
|
||||
struct gui *g = _gui;
|
||||
if (pthread_mutex_lock(g->lock)) ERR("mutex error\n");
|
||||
locked = 1;
|
||||
}
|
||||
|
||||
void gunlock(gui *_gui)
|
||||
{
|
||||
struct gui *g = _gui;
|
||||
locked = 0;
|
||||
if (pthread_mutex_unlock(g->lock)) ERR("mutex error\n");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user