projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Document InteractiveEval and follow OccName change
[ghc-hetmet.git]
/
rts
/
posix
/
Select.c
diff --git
a/rts/posix/Select.c
b/rts/posix/Select.c
index
e21ced0
..
ae9c717
100644
(file)
--- a/
rts/posix/Select.c
+++ b/
rts/posix/Select.c
@@
-10,6
+10,7
@@
/* #include "PosixSource.h" */
#include "Rts.h"
/* #include "PosixSource.h" */
#include "Rts.h"
+#include "Storage.h"
#include "Schedule.h"
#include "RtsUtils.h"
#include "RtsFlags.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 &&
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;
tso = sleeping_queue;
- sleeping_queue = tso->link;
+ sleeping_queue = tso->_link;
tso->why_blocked = NotBlocked;
tso->why_blocked = NotBlocked;
- tso->link = END_TSO_QUEUE;
- IF_DEBUG(scheduler,debugBelch("Waking up sleeping thread %d\n", tso->id));
+ 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);
flag = rtsTrue;
// 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)
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;
}
} else {
min = 0x7ffffff;
}
@@
-138,13
+139,17
@@
awaitEvent(rtsBool wait)
FD_ZERO(&wfd);
for(tso = blocked_queue_hd; tso != END_TSO_QUEUE; tso = next) {
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;
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;
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;
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;
barf("awaitEvent: descriptor out of range");
}
maxfd = (fd > maxfd) ? fd : maxfd;
@@
-207,7
+212,7
@@
awaitEvent(rtsBool wait)
* serviced.
*/
#if defined(RTS_USER_SIGNALS)
* serviced.
*/
#if defined(RTS_USER_SIGNALS)
- if (signals_pending()) {
+ if (RtsFlags.MiscFlags.install_signal_handlers && signals_pending()) {
startSignalHandlers(&MainCapability);
return; /* still hold the lock */
}
startSignalHandlers(&MainCapability);
return; /* still hold the lock */
}
@@
-238,7
+243,7
@@
awaitEvent(rtsBool wait)
prev = NULL;
if (select_succeeded || unblock_all) {
for(tso = blocked_queue_hd; tso != END_TSO_QUEUE; tso = next) {
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);
switch (tso->why_blocked) {
case BlockedOnRead:
ready = unblock_all || FD_ISSET(tso->block_info.fd, &rfd);
@@
-251,15
+256,15
@@
awaitEvent(rtsBool wait)
}
if (ready) {
}
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->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
pushOnRunQueue(&MainCapability,tso);
} else {
if (prev == NULL)
blocked_queue_hd = tso;
else
- prev->link = tso;
+ setTSOLink(&MainCapability, prev, tso);
prev = tso;
}
}
prev = tso;
}
}
@@
-267,7
+272,7
@@
awaitEvent(rtsBool wait)
if (prev == NULL)
blocked_queue_hd = blocked_queue_tl = END_TSO_QUEUE;
else {
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;
}
}
blocked_queue_tl = prev;
}
}