+Fri May 30 16:48:26 2003 Owen Taylor <otaylor@redhat.com>
+
+ * glib/giochannel.c (g_io_channel_error_from_errno):
+ Silently return G_IO_CHANNEL_ERROR_FAILED for EINTR,
+ since close() can return EINTR. (#11842, Balazs Scheidler)
+
Fri May 30 15:51:43 2003 Owen Taylor <otaylor@redhat.com>
* glib/giochannel.c (g_io_error_get_from_g_error):
+Fri May 30 16:48:26 2003 Owen Taylor <otaylor@redhat.com>
+
+ * glib/giochannel.c (g_io_channel_error_from_errno):
+ Silently return G_IO_CHANNEL_ERROR_FAILED for EINTR,
+ since close() can return EINTR. (#11842, Balazs Scheidler)
+
Fri May 30 15:51:43 2003 Owen Taylor <otaylor@redhat.com>
* glib/giochannel.c (g_io_error_get_from_g_error):
+Fri May 30 16:48:26 2003 Owen Taylor <otaylor@redhat.com>
+
+ * glib/giochannel.c (g_io_channel_error_from_errno):
+ Silently return G_IO_CHANNEL_ERROR_FAILED for EINTR,
+ since close() can return EINTR. (#11842, Balazs Scheidler)
+
Fri May 30 15:51:43 2003 Owen Taylor <otaylor@redhat.com>
* glib/giochannel.c (g_io_error_get_from_g_error):
+Fri May 30 16:48:26 2003 Owen Taylor <otaylor@redhat.com>
+
+ * glib/giochannel.c (g_io_channel_error_from_errno):
+ Silently return G_IO_CHANNEL_ERROR_FAILED for EINTR,
+ since close() can return EINTR. (#11842, Balazs Scheidler)
+
Fri May 30 15:51:43 2003 Owen Taylor <otaylor@redhat.com>
* glib/giochannel.c (g_io_error_get_from_g_error):
+Fri May 30 16:48:26 2003 Owen Taylor <otaylor@redhat.com>
+
+ * glib/giochannel.c (g_io_channel_error_from_errno):
+ Silently return G_IO_CHANNEL_ERROR_FAILED for EINTR,
+ since close() can return EINTR. (#11842, Balazs Scheidler)
+
Fri May 30 15:51:43 2003 Owen Taylor <otaylor@redhat.com>
* glib/giochannel.c (g_io_error_get_from_g_error):
+Fri May 30 16:48:26 2003 Owen Taylor <otaylor@redhat.com>
+
+ * glib/giochannel.c (g_io_channel_error_from_errno):
+ Silently return G_IO_CHANNEL_ERROR_FAILED for EINTR,
+ since close() can return EINTR. (#11842, Balazs Scheidler)
+
Fri May 30 15:51:43 2003 Owen Taylor <otaylor@redhat.com>
* glib/giochannel.c (g_io_error_get_from_g_error):
#ifdef EAGAIN
g_return_val_if_fail (en != EAGAIN, G_IO_CHANNEL_ERROR_FAILED);
#endif
-#ifdef EINTR
- g_return_val_if_fail (en != EINTR, G_IO_CHANNEL_ERROR_FAILED);
-#endif
switch (en)
{
return G_IO_CHANNEL_ERROR_FBIG;
#endif
+#ifdef EINTR
+ /* In general, we should catch EINTR before we get here,
+ * but close() is allowed to return EINTR by POSIX, so
+ * we need to catch it here; EINTR from close() is
+ * unrecoverable, because it's undefined whether
+ * the fd was actually closed or not, so we just return
+ * a generic error code.
+ */
+ case EINTR:
+ return G_IO_CHANNEL_ERROR_FAILED;
+#endif
+
#ifdef EINVAL
case EINVAL:
return G_IO_CHANNEL_ERROR_INVAL;