* HttpWebRequest.cs: Allow Proxy to be set to null on 2.0 profile.
[mono.git] / support / serial.c
index c0d2dbdae9fab589a295a44bd69b2f93b30f7a4f..f7746c41a866419171a091c593fd838600a71ca7 100644 (file)
@@ -11,6 +11,7 @@
 #include <string.h>
 #include <sys/poll.h>
 #include <sys/ioctl.h>
+#include <errno.h>
 
 #include <glib.h>
 
@@ -102,7 +103,9 @@ write_serial (int fd, guchar *buffer, int offset, int count, int timeout)
        ufd.fd = fd;
        ufd.events = POLLHUP | POLLOUT | POLLERR;
 
-       poll (&ufd, 1, timeout);
+       while (poll (&ufd, 1, timeout) == -1 && errno == EINTR){
+               
+       }
 
        if ((ufd.revents & POLLOUT) != POLLOUT) {
                return;
@@ -322,7 +325,7 @@ set_signal (int fd, MonoSerialSignal signal, gboolean value)
 }
 
 gboolean
-poll_serial (int fd, gint32 *error)
+poll_serial (int fd, gint32 *error, int timeout)
 {
        struct pollfd pinfo;
        
@@ -332,9 +335,12 @@ poll_serial (int fd, gint32 *error)
        pinfo.events = POLLIN;
        pinfo.revents = 0;
 
-       if (poll (&pinfo, 1, 0) == -1) {
-               *error = -1;
-               return FALSE;
+       while (poll (&pinfo, 1, timeout) == -1 && errno == EINTR) {
+               /* EINTR is an OK condition, we should not throw in the upper layer an IOException */
+               if (errno != EINTR){
+                       *error = -1;
+                       return FALSE;
+               }
        }
 
        return (pinfo.revents & POLLIN) != 0 ? 1 : 0;