X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fthreads%2Fgreen%2Fthreadio.c;h=fed33a70bfc0e140a8f5ea4e9b73d5ec0005a8de;hb=f730b8c3c57cd8f7da6aa8e5d3de85b51f7d4362;hp=e538b409ac23d64bd36baa3ca0f89529989f756b;hpb=3a5f5900ebb2b3f0fc418b5a6a0d551db494fc12;p=cacao.git diff --git a/src/threads/green/threadio.c b/src/threads/green/threadio.c index e538b409a..fed33a70b 100644 --- a/src/threads/green/threadio.c +++ b/src/threads/green/threadio.c @@ -12,7 +12,9 @@ #define DBG(s) -#include "sysdep/defines.h" +#include "config.h" + +#include "defines.h" #include #include @@ -107,6 +109,41 @@ threadedFileDescriptor(int fd) return (fd); } +void clear_thread_flags(void) +{ +#if !defined(BLOCKING_CALLS) + int fl, fd; + +#if defined(HAVE_FCNTL) && defined(O_NONBLOCK) + fd = fileno(stdin); + fl = fcntl(fd, F_GETFL, 0); + fl = fcntl(fd, F_SETFL, fl & (~O_NONBLOCK)); + + fd = fileno(stdout); + fl = fcntl(fd, F_GETFL, 0); + fl = fcntl(fd, F_SETFL, fl & (~O_NONBLOCK)); + + fd = fileno(stderr); + fl = fcntl(fd, F_GETFL, 0); + fl = fcntl(fd, F_SETFL, fl & (~O_NONBLOCK)); +#elif defined(HAVE_IOCTL) && defined(FIONBIO) + fl = 0; + fd = fileno(stdin); + (void) ioctl(fd, FIONBIO, &fl); + + fd = fileno(stdout); + (void) ioctl(fd, FIONBIO, &fl); + + fd = fileno(stderr); + (void) ioctl(fd, FIONBIO, &fl); +#endif + +#endif +fflush (stdout); +fflush (stderr); +} + + /* * Threaded create socket. */ @@ -172,7 +209,7 @@ threadedAccept(int fd, struct sockaddr* addr, int* len) #if defined(BLOCKING_CALLS) blockOnFile(fd, TH_ACCEPT); #endif - r = accept(fd, addr, len); + r = accept(fd, addr, (size_t*)len); if (r >= 0 || !(errno == EINPROGRESS || errno == EALREADY || errno == EWOULDBLOCK))