/* -----------------------------------------------------------------------------
- * $Id: Select.c,v 1.30 2003/10/01 10:49:09 wolfgang Exp $
+ * $Id: Select.c,v 1.31 2004/07/15 20:42:45 sof Exp $
*
* (c) The GHC Team 1995-2002
*
#include <unistd.h>
#endif
+#ifdef INTEGRITY
+#include <sys/socket.h>
+#endif
+
/* last timestamp */
nat timestamp = 0;
#ifdef RTS_SUPPORTS_THREADS
if(!workerWakeupInited) {
+#if defined(INTEGRITY)
+ int arg;
+ int rc = socketpair(AF_LOCAL, SOCK_STREAM, 0, workerWakeupPipe);
+ if (rc == -1) {
+ printf("failed to create socketpair: %d\n", errno);
+ }
+ arg = fcntl(workerWakeupPipe[0], F_GETFL,0);
+ fcntl(workerWakeupPipe[0], F_SETFL, arg | O_NONBLOCK);
+ arg = fcntl(workerWakeupPipe[1], F_GETFL,0);
+ fcntl(workerWakeupPipe[1], F_SETFL, arg | O_NONBLOCK);
+#else
pipe(workerWakeupPipe);
+#endif
workerWakeupInited = rtsTrue;
}
FD_SET(workerWakeupPipe[0], &rfd);
{
if(isWorkerBlockedInAwaitEvent && !workerWakeupPending) {
unsigned char dummy = 42; // Any value will do here
-
- // write something so that select() wakes up
- write(workerWakeupPipe[1],&dummy,1);
+ // write something so that select() wakes up
workerWakeupPending = rtsTrue;
+ write(workerWakeupPipe[1],&dummy,1);
}
}