FIX BUILD FD_SETSIZE signed
[ghc-hetmet.git] / rts / posix / Select.c
index e21ced0..8af57ba 100644 (file)
@@ -10,6 +10,7 @@
 /* #include "PosixSource.h" */
 
 #include "Rts.h"
+#include "Storage.h"
 #include "Schedule.h"
 #include "RtsUtils.h"
 #include "RtsFlags.h"
@@ -60,12 +61,12 @@ wakeUpSleepingThreads(lnat ticks)
     rtsBool flag = rtsFalse;
 
     while (sleeping_queue != END_TSO_QUEUE &&
-          (int)(ticks - sleeping_queue->block_info.target) > 0) {
+          (int)(ticks - sleeping_queue->block_info.target) >= 0) {
        tso = sleeping_queue;
        sleeping_queue = tso->link;
        tso->why_blocked = NotBlocked;
        tso->link = END_TSO_QUEUE;
-       IF_DEBUG(scheduler,debugBelch("Waking up sleeping thread %d\n", tso->id));
+       IF_DEBUG(scheduler,debugBelch("Waking up sleeping thread %lu\n", (unsigned long)tso->id));
        // MainCapability: this code is !THREADED_RTS
        pushOnRunQueue(&MainCapability,tso);
        flag = rtsTrue;
@@ -126,7 +127,7 @@ awaitEvent(rtsBool wait)
          min = 0;
       } else if (sleeping_queue != END_TSO_QUEUE) {
          min = (sleeping_queue->block_info.target - ticks) 
-             * TICK_MILLISECS * 1000;
+             * RtsFlags.MiscFlags.tickInterval * 1000;
       } else {
          min = 0x7ffffff;
       }
@@ -140,11 +141,15 @@ awaitEvent(rtsBool wait)
       for(tso = blocked_queue_hd; tso != END_TSO_QUEUE; tso = next) {
        next = tso->link;
 
+      /* On FreeBSD FD_SETSIZE is unsigned. Cast it to signed int
+       * in order to switch off the 'comparison between signed and
+       * unsigned error message
+       */
        switch (tso->why_blocked) {
        case BlockedOnRead:
          { 
            int fd = tso->block_info.fd;
-           if (fd >= FD_SETSIZE) {
+           if (fd >= (int)FD_SETSIZE) {
                barf("awaitEvent: descriptor out of range");
            }
            maxfd = (fd > maxfd) ? fd : maxfd;
@@ -155,7 +160,7 @@ awaitEvent(rtsBool wait)
        case BlockedOnWrite:
          { 
            int fd = tso->block_info.fd;
-           if (fd >= FD_SETSIZE) {
+           if (fd >= (int)FD_SETSIZE) {
                barf("awaitEvent: descriptor out of range");
            }
            maxfd = (fd > maxfd) ? fd : maxfd;
@@ -207,7 +212,7 @@ awaitEvent(rtsBool wait)
           * serviced.
           */
 #if defined(RTS_USER_SIGNALS)
-         if (signals_pending()) {
+         if (RtsFlags.MiscFlags.install_signal_handlers && signals_pending()) {
              startSignalHandlers(&MainCapability);
              return; /* still hold the lock */
          }
@@ -251,7 +256,7 @@ awaitEvent(rtsBool wait)
              }
       
              if (ready) {
-                 IF_DEBUG(scheduler,debugBelch("Waking up blocked thread %d\n", tso->id));
+               IF_DEBUG(scheduler,debugBelch("Waking up blocked thread %lu\n", (unsigned long)tso->id));
                  tso->why_blocked = NotBlocked;
                  tso->link = END_TSO_QUEUE;
                  pushOnRunQueue(&MainCapability,tso);