Clearing of thread flags added
authorcacao <none@none>
Tue, 27 Oct 1998 21:52:21 +0000 (21:52 +0000)
committercacao <none@none>
Tue, 27 Oct 1998 21:52:21 +0000 (21:52 +0000)
main.c
src/cacao/cacao.c
src/threads/green/threadio.c
src/threads/green/threads.h
threads/thread.h
threads/threadio.c

diff --git a/main.c b/main.c
index 631d84e9556bf75e3635712a71463f3dad0b0c22..fed957978c7c9c4e54dcbc934753a28e4035faca 100644 (file)
--- a/main.c
+++ b/main.c
@@ -424,7 +424,6 @@ int main(int argc, char **argv)
        java_objectheader *exceptionptr;
        void *dummy;
        
-
    /********** interne (nur fuer main relevante Optionen) **************/
    
        char logfilename[200] = "";
@@ -443,6 +442,8 @@ int main(int argc, char **argv)
 #endif
 
 
+       atexit(clear_thread_flags);
+
    /************ Infos aus der Environment lesen ************************/
 
        cp = getenv ("CLASSPATH");
index 631d84e9556bf75e3635712a71463f3dad0b0c22..fed957978c7c9c4e54dcbc934753a28e4035faca 100644 (file)
@@ -424,7 +424,6 @@ int main(int argc, char **argv)
        java_objectheader *exceptionptr;
        void *dummy;
        
-
    /********** interne (nur fuer main relevante Optionen) **************/
    
        char logfilename[200] = "";
@@ -443,6 +442,8 @@ int main(int argc, char **argv)
 #endif
 
 
+       atexit(clear_thread_flags);
+
    /************ Infos aus der Environment lesen ************************/
 
        cp = getenv ("CLASSPATH");
index e538b409ac23d64bd36baa3ca0f89529989f756b..379b49af11d16acc7a3afa01037741209b3d6441 100644 (file)
@@ -107,6 +107,39 @@ 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
+}
+
+
 /*
  * Threaded create socket.
  */
index f71cd06c1ef6256e3d4041920eb051c09a2db2ca..1d37f613deec23825d350fbd97de7fe1a7145172 100644 (file)
@@ -94,6 +94,7 @@ typedef struct _thread
 } thread;
 
 void initThreads(u1 *stackbottom);
+void clear_thread_flags(void);
 void startThread(thread*);
 void resumeThread(thread*);
 void iresumeThread(thread*);
index f71cd06c1ef6256e3d4041920eb051c09a2db2ca..1d37f613deec23825d350fbd97de7fe1a7145172 100644 (file)
@@ -94,6 +94,7 @@ typedef struct _thread
 } thread;
 
 void initThreads(u1 *stackbottom);
+void clear_thread_flags(void);
 void startThread(thread*);
 void resumeThread(thread*);
 void iresumeThread(thread*);
index e538b409ac23d64bd36baa3ca0f89529989f756b..379b49af11d16acc7a3afa01037741209b3d6441 100644 (file)
@@ -107,6 +107,39 @@ 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
+}
+
+
 /*
  * Threaded create socket.
  */