From: Thomas Veerman Date: Fri, 8 Jul 2011 13:59:07 +0000 (+0000) Subject: Fix compiler warnings and mutex deadlock X-Git-Tag: v3.2.0~486 X-Git-Url: http://zhaoyanbai.com/repos/man.delv.html?a=commitdiff_plain;h=b61266eb5172f02750996aceaede07ab3802dfac;p=minix.git Fix compiler warnings and mutex deadlock --- diff --git a/lib/libmthread/Makefile b/lib/libmthread/Makefile index 5e8c3b7d8..a35cc5e64 100644 --- a/lib/libmthread/Makefile +++ b/lib/libmthread/Makefile @@ -1,6 +1,6 @@ # Makefile for libmthread -CPPFLAGS+=-O -D_MINIX -D_POSIX_SOURCE -Wall +CPPFLAGS+=-O -D_MINIX -D_POSIX_SOURCE -Wall -Werror LIB= mthread diff --git a/lib/libmthread/misc.c b/lib/libmthread/misc.c index 81301f31b..57e94bb39 100644 --- a/lib/libmthread/misc.c +++ b/lib/libmthread/misc.c @@ -21,11 +21,15 @@ PUBLIC void mthread_debug_f(const char *file, int line, const char *msg) PUBLIC void mthread_panic_f(const char *file, int line, const char *msg) { /* Print panic message to stdout and exit */ + volatile int *sf; + + sf = NULL; + printf("mthread panic (%s:%d): ", file, line); - printf(msg); + printf("%s", msg); printf("\n"); fflush(stdout); /* Force debug print to screen */ - *((int *)0) = 1; /* Cause segfault to generate trace */ + *((int *) sf ) = 1; /* Cause segfault to generate trace */ exit(1); } diff --git a/lib/libmthread/mutex.c b/lib/libmthread/mutex.c index 5aacbcf03..0515556b9 100644 --- a/lib/libmthread/mutex.c +++ b/lib/libmthread/mutex.c @@ -190,6 +190,8 @@ mthread_mutex_t *mutex; /* Mutex that is to be locked */ m = (struct __mthread_mutex *) *mutex; if (!mthread_mutex_valid(&m)) return(EINVAL); + else if (m->mm_owner == current_thread) + return(EDEADLK); else if (m->mm_owner == NO_THREAD) { m->mm_owner = current_thread; return(0);