diff --git a/ChangeLog b/ChangeLog index bd0ca8df1..bc39ab58a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Fri May 30 16:48:26 2003 Owen Taylor + + * 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:58:33 2003 Owen Taylor * configure.in: Rework debug_default handling to work diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index bd0ca8df1..bc39ab58a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +Fri May 30 16:48:26 2003 Owen Taylor + + * 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:58:33 2003 Owen Taylor * configure.in: Rework debug_default handling to work diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index bd0ca8df1..bc39ab58a 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,9 @@ +Fri May 30 16:48:26 2003 Owen Taylor + + * 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:58:33 2003 Owen Taylor * configure.in: Rework debug_default handling to work diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index bd0ca8df1..bc39ab58a 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,9 @@ +Fri May 30 16:48:26 2003 Owen Taylor + + * 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:58:33 2003 Owen Taylor * configure.in: Rework debug_default handling to work diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index bd0ca8df1..bc39ab58a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +Fri May 30 16:48:26 2003 Owen Taylor + + * 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:58:33 2003 Owen Taylor * configure.in: Rework debug_default handling to work diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index bd0ca8df1..bc39ab58a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +Fri May 30 16:48:26 2003 Owen Taylor + + * 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:58:33 2003 Owen Taylor * configure.in: Rework debug_default handling to work diff --git a/glib/giochannel.c b/glib/giochannel.c index 3b02228d3..af6560690 100644 --- a/glib/giochannel.c +++ b/glib/giochannel.c @@ -538,9 +538,6 @@ g_io_channel_error_from_errno (gint en) #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) { @@ -561,6 +558,18 @@ g_io_channel_error_from_errno (gint 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;