while (sleeping_queue != END_TSO_QUEUE &&
(int)(ticks - sleeping_queue->block_info.target) >= 0) {
tso = sleeping_queue;
- sleeping_queue = tso->link;
+ sleeping_queue = tso->_link;
tso->why_blocked = NotBlocked;
- tso->link = END_TSO_QUEUE;
+ tso->_link = END_TSO_QUEUE;
IF_DEBUG(scheduler,debugBelch("Waking up sleeping thread %lu\n", (unsigned long)tso->id));
// MainCapability: this code is !THREADED_RTS
pushOnRunQueue(&MainCapability,tso);
FD_ZERO(&wfd);
for(tso = blocked_queue_hd; tso != END_TSO_QUEUE; tso = next) {
- next = tso->link;
+ 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;
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;
prev = NULL;
if (select_succeeded || unblock_all) {
for(tso = blocked_queue_hd; tso != END_TSO_QUEUE; tso = next) {
- next = tso->link;
+ next = tso->_link;
switch (tso->why_blocked) {
case BlockedOnRead:
ready = unblock_all || FD_ISSET(tso->block_info.fd, &rfd);
if (ready) {
IF_DEBUG(scheduler,debugBelch("Waking up blocked thread %lu\n", (unsigned long)tso->id));
tso->why_blocked = NotBlocked;
- tso->link = END_TSO_QUEUE;
+ tso->_link = END_TSO_QUEUE;
pushOnRunQueue(&MainCapability,tso);
} else {
if (prev == NULL)
blocked_queue_hd = tso;
else
- prev->link = tso;
+ setTSOLink(&MainCapability, prev, tso);
prev = tso;
}
}
if (prev == NULL)
blocked_queue_hd = blocked_queue_tl = END_TSO_QUEUE;
else {
- prev->link = END_TSO_QUEUE;
+ prev->_link = END_TSO_QUEUE;
blocked_queue_tl = prev;
}
}