T284: Fix thread_{get,set}_recv_slot()
authorSimon Gerber <simon.gerber@inf.ethz.ch>
Fri, 26 Aug 2016 13:37:38 +0000 (15:37 +0200)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Wed, 21 Sep 2016 09:48:56 +0000 (11:48 +0200)
Signed-off-by: Simon Gerber <simon.gerber@inf.ethz.ch>

lib/barrelfish/include/threads_priv.h
lib/barrelfish/threads.c

index 14ab5cc..41dfe27 100644 (file)
@@ -83,7 +83,7 @@ struct thread {
     uint32_t    outgoing_token;             ///< Token of outgoing message
     bool    mask_channels;
     struct capref recv_slots[16];           ///< Queued cap recv slots
-    uint8_t recv_slot_count;                ///< number of currently queued recv slots
+    int8_t recv_slot_count;                 ///< number of currently queued recv slots
 };
 
 void thread_enqueue(struct thread *thread, struct thread **queue);
index 27892fe..b853f12 100644 (file)
@@ -701,7 +701,8 @@ void thread_store_recv_slot(struct capref recv_slot)
     struct thread *me = thread_self();
     assert(me);
 
-    assert(me->recv_slot_count < 15);
+    assert(me->recv_slot_count < 16);
+    assert(me->recv_slot_count >= 0);
 
     me->recv_slots[me->recv_slot_count++] = recv_slot;
 }
@@ -710,7 +711,8 @@ struct capref thread_get_next_recv_slot(void)
 {
     struct thread *me = thread_self();
 
-    if (me->recv_slot_count == 0) {
+    // HERE: recv_slot_count is > 0 if we have one+ caps stored
+    if (me->recv_slot_count <= 0) {
         return NULL_CAP;
     }