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
|
test: test.o gui.a
|
||||||
$(CC) -o test $(OBJS) test.o -lX11 -pthread -lm
|
$(CC) -o test $(OBJS) test.o -lX11 -pthread -lm
|
||||||
|
|
||||||
|
x.o:x.c
|
||||||
|
$(CC) $(CFLAGS) -o $@ -c $< -finstrument-functions
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CC) $(CFLAGS) -o $@ -c $<
|
$(CC) $(CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
|||||||
@@ -5,15 +5,31 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <pthread.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)
|
void glock(gui *_gui)
|
||||||
{
|
{
|
||||||
struct gui *g = _gui;
|
struct gui *g = _gui;
|
||||||
if (pthread_mutex_lock(g->lock)) ERR("mutex error\n");
|
if (pthread_mutex_lock(g->lock)) ERR("mutex error\n");
|
||||||
|
locked = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gunlock(gui *_gui)
|
void gunlock(gui *_gui)
|
||||||
{
|
{
|
||||||
struct gui *g = _gui;
|
struct gui *g = _gui;
|
||||||
|
locked = 0;
|
||||||
if (pthread_mutex_unlock(g->lock)) ERR("mutex error\n");
|
if (pthread_mutex_unlock(g->lock)) ERR("mutex error\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user