2007-01-23 Miguel de Icaza <miguel@novell.com>
authorMiguel de Icaza <miguel@gnome.org>
Tue, 23 Jan 2007 15:19:58 +0000 (15:19 -0000)
committerMiguel de Icaza <miguel@gnome.org>
Tue, 23 Jan 2007 15:19:58 +0000 (15:19 -0000)
* serial.c (poll_serial): Fix for #79073, based on the patch by
Leszek Ciesielski, without introducing a GNU libc-ism.
(write_serial): Handle EINTR here as well.

svn path=/trunk/mono/; revision=71514

support/ChangeLog
support/serial.c

index 10097e6b8a4b92a3347e2fbc0eb4d055b29ce240..c2591852c3ce8d7af58e85daa30650858f0d4bc8 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-23  Miguel de Icaza  <miguel@novell.com>
+
+       * serial.c (poll_serial): Fix for #79073, based on the patch by
+       Leszek Ciesielski, without introducing a GNU libc-ism.
+       (write_serial): Handle EINTR here as well.
+
 2006-11-30  Jonathan Pryor  <jonpryor@vt.edu>
 
        * map.c: _cnm_return_val_if_overflow() should be a no-op unless DEBUG is
index 34d3943142d064db85829fb41129aef88ee0092d..f7746c41a866419171a091c593fd838600a71ca7 100644 (file)
@@ -103,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;
@@ -333,12 +335,12 @@ poll_serial (int fd, gint32 *error, int timeout)
        pinfo.events = POLLIN;
        pinfo.revents = 0;
 
-       if (poll (&pinfo, 1, timeout) == -1) {
+       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)
+               if (errno != EINTR){
+                       *error = -1;
                        return FALSE;
-               *error = -1;
-               return FALSE;
+               }
        }
 
        return (pinfo.revents & POLLIN) != 0 ? 1 : 0;