X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fposix%2FSelect.c;h=8af57bac6ff29c69aeda464dbe65a9890d5cf977;hb=05b677fad57427a5639b36a1822c9ebd52cb3339;hp=ccf39458d2b2fb1c0e55133a149c66d7a1a41709;hpb=93db1991b5cacf8357493a2e17fbbfb485f3205b;p=ghc-hetmet.git diff --git a/rts/posix/Select.c b/rts/posix/Select.c index ccf3945..8af57ba 100644 --- a/rts/posix/Select.c +++ b/rts/posix/Select.c @@ -10,6 +10,7 @@ /* #include "PosixSource.h" */ #include "Rts.h" +#include "Storage.h" #include "Schedule.h" #include "RtsUtils.h" #include "RtsFlags.h" @@ -60,7 +61,7 @@ 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; @@ -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 */ }