Handle EINTR for a few more write() calls
authorColin Walters <walters@verbum.org>
Wed, 29 Aug 2012 15:44:01 +0000 (11:44 -0400)
committerColin Walters <walters@verbum.org>
Fri, 25 Jan 2013 16:23:48 +0000 (11:23 -0500)
https://bugzilla.gnome.org/show_bug.cgi?id=682819

glib/gmessages.c
glib/gwakeup.c

index 91d7a21..d346eaf 100644 (file)
@@ -281,7 +281,10 @@ static void
 write_string (int          fd,
              const gchar *string)
 {
-  write (fd, string, strlen (string));
+  int res;
+  do 
+    res = write (fd, string, strlen (string));
+  while (G_UNLIKELY (res == -1 && errno == EINTR));
 }
 
 static GLogDomain*
index bb49059..ad92d56 100644 (file)
@@ -230,11 +230,20 @@ void
 g_wakeup_signal (GWakeup *wakeup)
 {
   guint64 one = 1;
+  int res;
 
   if (wakeup->fds[1] == -1)
-    write (wakeup->fds[0], &one, sizeof one);
+    {
+      do
+        res = write (wakeup->fds[0], &one, sizeof one);
+      while (G_UNLIKELY (res == -1 && errno == EINTR));
+    }
   else
-    write (wakeup->fds[1], &one, 1);
+    {
+      do
+        write (wakeup->fds[1], &one, 1);
+      while (G_UNLIKELY (res == -1 && errno == EINTR));
+    }
 }
 
 /**