rpms/glibc/F-9 glibc-nscd-inotify-fix.patch, NONE, 1.1 glibc-rh455360.patch, NONE, 1.1 glibc.spec, 1.361, 1.362
Jakub Jelinek (jakub)
fedora-extras-commits at redhat.com
Wed Jul 16 14:59:06 UTC 2008
- Previous message (by thread): rpms/xorg-x11-drv-radeonhd/F-9 .cvsignore, 1.33, 1.34 sources, 1.33, 1.34 xorg-x11-drv-radeonhd-README.fedora, 1.31, 1.32 xorg-x11-drv-radeonhd.spec, 1.41, 1.42
- Next message (by thread): rpms/lyx/devel .cvsignore, 1.28, 1.29 lyx.spec, 1.69, 1.70 sources, 1.26, 1.27
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: jakub
Update of /cvs/pkgs/rpms/glibc/F-9
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv22429
Modified Files:
glibc.spec
Added Files:
glibc-nscd-inotify-fix.patch glibc-rh455360.patch
Log Message:
2.8-8
glibc-nscd-inotify-fix.patch:
--- NEW FILE glibc-nscd-inotify-fix.patch ---
2008-07-12 Ulrich Drepper <drepper at redhat.com>
* nscd/connections.c (main_loop_poll): Fix handling of read errors
from inotify.
(main_loop_epoll): Likewise.
--- libc/nscd/connections.c 3 Jul 2008 12:21:15 -0000 1.55.2.42
+++ libc/nscd/connections.c 16 Jul 2008 09:47:15 -0000
@@ -1806,42 +1806,64 @@ main_loop_poll (void)
size_t first = 1;
#ifdef HAVE_INOTIFY
- if (conns[1].fd == inotify_fd)
+ if (inotify_fd != -1 && conns[1].fd == inotify_fd)
{
if (conns[1].revents != 0)
{
- bool done[lastdb] = { false, };
+ bool to_clear[lastdb] = { false, };
union
{
struct inotify_event i;
char buf[100];
} inev;
- while (TEMP_FAILURE_RETRY (read (inotify_fd, &inev,
- sizeof (inev)))
- >= (ssize_t) sizeof (struct inotify_event))
+ while (1)
{
+ ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, &inev,
+ sizeof (inev)));
+ if (nb < (ssize_t) sizeof (struct inotify_event))
+ {
+ if (nb == -1)
+ {
+ /* Something went wrong when reading the inotify
+ data. Better disable inotify. */
+ conns[1].fd = -1;
+ firstfree = 1;
+ if (nused == 2)
+ nused = 1;
+ close (inotify_fd);
+ inotify_fd = -1;
+ dbg_log (_("disabled inotify after read error"));
+ }
+ break;
+ }
+
/* Check which of the files changed. */
for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
- if (!done[dbcnt]
- && (inev.i.wd == dbs[dbcnt].inotify_descr
- || (dbcnt == hstdb
- && inev.i.wd == resolv_conf_descr)))
+ if (inev.i.wd == dbs[dbcnt].inotify_descr)
{
- if (dbcnt == hstdb
- && inev.i.wd == resolv_conf_descr)
- res_init ();
-
- pthread_mutex_lock (&dbs[dbcnt].prune_lock);
- dbs[dbcnt].clear_cache = 1;
- pthread_mutex_unlock (&dbs[dbcnt].prune_lock);
- pthread_cond_signal (&dbs[dbcnt].prune_cond);
-
- done[dbcnt] = true;
- break;
+ to_clear[dbcnt] = true;
+ goto next;
}
+
+ if (inev.i.wd == resolv_conf_descr)
+ {
+ res_init ();
+ to_clear[hstdb] = true;
+ }
+ next:;
}
+ /* Actually perform the cache clearing. */
+ for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
+ if (to_clear[dbcnt])
+ {
+ pthread_mutex_lock (&dbs[dbcnt].prune_lock);
+ dbs[dbcnt].clear_cache = 1;
+ pthread_mutex_unlock (&dbs[dbcnt].prune_lock);
+ pthread_cond_signal (&dbs[dbcnt].prune_cond);
+ }
+
--n;
}
@@ -1966,27 +1988,57 @@ main_loop_epoll (int efd)
#ifdef HAVE_INOTIFY
else if (revs[cnt].data.fd == inotify_fd)
{
+ bool to_clear[lastdb] = { false, };
union
{
struct inotify_event i;
char buf[100];
} inev;
- while (TEMP_FAILURE_RETRY (read (inotify_fd, &inev,
- sizeof (inev)))
- >= (ssize_t) sizeof (struct inotify_event))
+ while (1)
{
+ ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, &inev,
+ sizeof (inev)));
+ if (nb < (ssize_t) sizeof (struct inotify_event))
+ {
+ if (nb == -1)
+ {
+ /* Something went wrong when reading the inotify
+ data. Better disable inotify. */
+ (void) epoll_ctl (efd, EPOLL_CTL_DEL, inotify_fd,
+ NULL);
+ close (inotify_fd);
+ inotify_fd = -1;
+ dbg_log (_("disabled inotify after read error"));
+ }
+ break;
+ }
+
/* Check which of the files changed. */
for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
if (inev.i.wd == dbs[dbcnt].inotify_descr)
{
- pthread_mutex_trylock (&dbs[dbcnt].prune_lock);
- dbs[dbcnt].clear_cache = 1;
- pthread_mutex_unlock (&dbs[dbcnt].prune_lock);
- pthread_cond_signal (&dbs[dbcnt].prune_cond);
- break;
+ to_clear[dbcnt] = true;
+ goto next;
}
+
+ if (inev.i.wd == resolv_conf_descr)
+ {
+ res_init ();
+ to_clear[hstdb] = true;
+ }
+ next:;
}
+
+ /* Actually perform the cache clearing. */
+ for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
+ if (to_clear[dbcnt])
+ {
+ pthread_mutex_lock (&dbs[dbcnt].prune_lock);
+ dbs[dbcnt].clear_cache = 1;
+ pthread_mutex_unlock (&dbs[dbcnt].prune_lock);
+ pthread_cond_signal (&dbs[dbcnt].prune_cond);
+ }
}
#endif
else
@@ -2010,8 +2062,10 @@ main_loop_epoll (int efd)
/* Now look for descriptors for accepted connections which have
no reply in too long of a time. */
time_t laststart = now - ACCEPT_TIMEOUT;
+ assert (starttime[sock] == 0);
+ assert (inotify_fd == -1 || starttime[inotify_fd] == 0);
for (int cnt = highest; cnt > STDERR_FILENO; --cnt)
- if (cnt != sock && starttime[cnt] != 0 && starttime[cnt] < laststart)
+ if (starttime[cnt] != 0 && starttime[cnt] < laststart)
{
/* We are waiting for this one for too long. Close it. */
(void) epoll_ctl (efd, EPOLL_CTL_DEL, cnt, NULL);
glibc-rh455360.patch:
--- NEW FILE glibc-rh455360.patch ---
2008-07-15 Ulrich Drepper <drepper at redhat.com>
* stdio-common/vfprintf.c (_IO_helper_overflow): In case _IO_sputn
doesn't manage to write anything, fail.
--- libc/stdio-common/vfprintf.c 8 Apr 2008 07:59:50 -0000 1.128.2.13
+++ libc/stdio-common/vfprintf.c 16 Jul 2008 09:47:15 -0000
@@ -2080,6 +2080,11 @@ _IO_helper_overflow (_IO_FILE *s, int c)
{
_IO_size_t written = _IO_sputn (target, s->_wide_data->_IO_write_base,
used);
+ if (written == 0 || written == WEOF)
+ return WEOF;
+ __wmemmove (s->_wide_data->_IO_write_base,
+ s->_wide_data->_IO_write_base + written,
+ used - written);
s->_wide_data->_IO_write_ptr -= written;
}
#else
@@ -2087,6 +2092,10 @@ _IO_helper_overflow (_IO_FILE *s, int c)
if (used)
{
_IO_size_t written = _IO_sputn (target, s->_IO_write_base, used);
+ if (written == 0 || written == EOF)
+ return EOF;
+ memmove (s->_IO_write_base, s->_IO_write_base + written,
+ used - written);
s->_IO_write_ptr -= written;
}
#endif
Index: glibc.spec
===================================================================
RCS file: /cvs/pkgs/rpms/glibc/F-9/glibc.spec,v
retrieving revision 1.361
retrieving revision 1.362
diff -u -r1.361 -r1.362
--- glibc.spec 8 Jul 2008 16:46:35 -0000 1.361
+++ glibc.spec 16 Jul 2008 14:58:16 -0000 1.362
@@ -23,7 +23,7 @@
Summary: The GNU libc libraries
Name: glibc
Version: 2.8
-Release: 7
+Release: 8
# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
# Things that are linked directly into dynamically linked programs
# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
@@ -59,6 +59,8 @@
Patch17: glibc-sparc.patch
Patch18: glibc-tls-getaddr.patch
Patch19: glibc-bz6719.patch
+Patch20: glibc-nscd-inotify-fix.patch
+Patch21: glibc-rh455360.patch
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Obsoletes: glibc-profile < 2.4
Provides: ldconfig
@@ -256,6 +258,8 @@
%patch17 -p1
%patch18 -p1
%patch19 -p1
+%patch20 -p1
+%patch21 -p1
# A lot of programs still misuse memcpy when they have to use
# memmove. The memcpy implementation below is not tolerant at
@@ -1016,6 +1020,10 @@
%endif
%changelog
+* Wed Jul 16 2008 Jakub Jelinek <jakub at redhat.com> 2.8-8
+- another nscd fix
+- fix unbuffered vfprintf (#455360)
+
* Tue Jul 8 2008 Jakub Jelinek <jakub at redhat.com> 2.8-7
- assorted nscd fixes (#450704, #445656, #449358)
- misc fixes (BZ#3406, BZ#6461, BZ#6472, BZ#6612, BZ#6657, BZ#6723, BZ#6719)
- Previous message (by thread): rpms/xorg-x11-drv-radeonhd/F-9 .cvsignore, 1.33, 1.34 sources, 1.33, 1.34 xorg-x11-drv-radeonhd-README.fedora, 1.31, 1.32 xorg-x11-drv-radeonhd.spec, 1.41, 1.42
- Next message (by thread): rpms/lyx/devel .cvsignore, 1.28, 1.29 lyx.spec, 1.69, 1.70 sources, 1.26, 1.27
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list