pthread: Fix semaphore's TAILQ type
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 19 Oct 2015 15:25:56 +0000 (11:25 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 28 Oct 2015 16:05:12 +0000 (12:05 -0400)
The semaphore's TAILQ isn't of pthreads, it's of sem_queue_elements.  I
spotted this while trying to debug something else in the area.  The
warning was hidden because the bad assignment was in a system header.

Specifically, when the TAILQ macros attempt to do some form of
assignment, they should generate an incompatible pointer type warning.
However, sys/queue.h is a system header, and those warnings are ignored
by default.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/pthread/semaphore.c
user/pthread/semaphore.h

index 4fd89a2..3ecdf9a 100644 (file)
@@ -5,15 +5,6 @@
 #include <benchutil/alarm.h>
 #include <errno.h>
 
-struct sem_queue_element {
-       TAILQ_ENTRY(sem_queue_element) next;
-       struct sem *sem;
-       pthread_t pthread;
-       uint64_t us_timeout;
-       struct alarm_waiter awaiter;
-       bool timedout;
-};
-
 int sem_init (sem_t *__sem, int __pshared, unsigned int __value)
 {
        if(__pshared == TRUE) {
index b4b6283..e5a2b87 100644 (file)
 #include <sys/queue.h>
 #include <pthread.h>
 #include <parlib/mcs.h>
+#include <benchutil/alarm.h>
 
 __BEGIN_DECLS
 
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
+struct sem_queue_element {
+       TAILQ_ENTRY(sem_queue_element) next;
+       struct sem *sem;
+       pthread_t pthread;
+       uint64_t us_timeout;
+       struct alarm_waiter awaiter;
+       bool timedout;
+};
+TAILQ_HEAD(sem_qe_queue, sem_queue_element);
+
 typedef struct sem
 {
        unsigned int count;
-       struct pthread_queue queue;
+       struct sem_qe_queue queue;
        struct spin_pdr_lock lock;
 } sem_t;