about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-11-28 11:18:19 +0000
committerJakub Jelinek <jakub@redhat.com>2006-11-28 11:18:19 +0000
commitf12ca311c01cba335a9e4c866a0c966d2efd41a2 (patch)
tree0740f05d6deda7041887e5dfa9b981f280ff8f0c
parent9a40233fa0d4c587880f5d3d3f42813ec6e6ae32 (diff)
downloadglibc-cvs/fedora-glibc-2_5_90-8.tar.gz
glibc-cvs/fedora-glibc-2_5_90-8.tar.xz
glibc-cvs/fedora-glibc-2_5_90-8.zip
Updated to fedora-glibc-20061128T1037 cvs/fedora-glibc-2_5_90-8
-rw-r--r--ChangeLog21
-rw-r--r--fedora/branch.mk4
-rw-r--r--fedora/glibc.spec.in15
-rw-r--r--nptl/Makefile3
-rw-r--r--resolv/mapv4v6addr.h10
-rw-r--r--sunrpc/svc_run.c35
-rw-r--r--sysdeps/unix/sysv/linux/i386/getgroups.c5
7 files changed, 70 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index 966a3581df..2ade0a332c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2006-11-27  Jakub Jelinek  <jakub@redhat.com>
+
+	[BZ #3559]
+	* sunrpc/svc_run.c (svc_run): Fail instead of segfaulting if
+	malloc crashed.  Don't allocate memory unnecessarily in each
+	loop.
+
+2006-10-21  Jakub Jelinek  <jakub@redhat.com>
+
+	* resolv/mapv4v6addr.h (map_v4v6_address): Fix last change.
+
+2006-11-20  Ulrich Drepper  <drepper@redhat.com>
+
+	* resolv/mapv4v6addr.h (map_v4v6_address): Optimize a bit.
+
+2006-11-18  Bruno Haible  <bruno@clisp.org>
+
+	* sysdeps/unix/sysv/linux/i386/getgroups.c (__getgroups): Invoke
+	__sysconf only after having tried to call getgroups32.
+
 2006-11-19  Ulrich Drepper  <drepper@redhat.com>
 
 	* nss/nss_files/files-hosts.c (LINE_PARSER): Support IPv6-style
@@ -15,6 +35,7 @@
 	* po/nl.po: Update from translation team.
 
 	* timezone/zdump.c: Redo fix for BZ #3137.
+
 2006-11-14  Jakub Jelinek  <jakub@redhat.com>
 
 	* nss/nss_files/files-alias.c (get_next_alias): Set line back
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 2896206bcb..f3e425aa79 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -3,5 +3,5 @@ glibc-branch := fedora
 glibc-base := HEAD
 DIST_BRANCH := devel
 COLLECTION := dist-fc4
-fedora-sync-date := 2006-11-20 10:00 UTC
-fedora-sync-tag := fedora-glibc-20061120T1000
+fedora-sync-date := 2006-11-28 10:37 UTC
+fedora-sync-tag := fedora-glibc-20061128T1037
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index bd8a7c3120..8ba2ea5911 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -1,4 +1,4 @@
-%define glibcrelease 7
+%define glibcrelease 8
 %define auxarches i586 i686 athlon sparcv9 alphaev6
 %define xenarches i686 athlon
 %ifarch %{xenarches}
@@ -823,7 +823,7 @@ GCC="gcc -m64"
 GXX="g++ -m64"
 %endif
 
-BuildFlags="$BuildFlags -DNDEBUG=1"
+BuildFlags="$BuildFlags -DNDEBUG=1 -fasynchronous-unwind-tables"
 EnableKernel="--enable-kernel=%{enablekernel}"
 echo "$GCC" > Gcc
 AddOns=`echo */configure | sed -e 's!/configure!!g;s!\(linuxthreads\|nptl\|rtkaio\|powerpc-cpu\)\( \|$\)!!g;s! \+$!!;s! !,!g;s!^!,!;/^,\*$/d'`
@@ -1155,6 +1155,11 @@ cp -f $RPM_BUILD_ROOT%{_prefix}/share/zoneinfo/US/Eastern $RPM_BUILD_ROOT/etc/lo
 
 rm -rf $RPM_BUILD_ROOT%{_prefix}/share/zoneinfo
 
+# Make sure %config files have the same timestamp
+touch -r fedora/glibc.spec.in $RPM_BUILD_ROOT/etc/ld.so.conf
+touch -r timezone/northamerica $RPM_BUILD_ROOT/etc/localtime
+touch -r sunrpc/etc.rpc $RPM_BUILD_ROOT/etc/rpc
+
 cd fedora
 $GCC -Os -static -o build-locale-archive build-locale-archive.c \
   ../build-%{nptl_target_cpu}-linuxnptl/locale/locarchive.o \
@@ -1529,6 +1534,12 @@ rm -f *.filelist*
 %endif
 
 %changelog
+* Tue Nov 28 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-8
+- fix svc_run (#216834, BZ#3559)
+- add -fasynchronous-unwind-tables to CFLAGS (#216518)
+- make sure there is consistent timestamp for /etc/ld.so.conf,
+  /etc/localtime and /etc/rpc between multilib glibc rpms
+
 * Mon Nov 20 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-7
 - handle IPv6 addresses in /etc/hosts that are mappable to
   IPv4 addresses in IPv4 host lookups (#215283)
diff --git a/nptl/Makefile b/nptl/Makefile
index ef12a80689..8c1f74e2bb 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -340,7 +340,8 @@ endif
 extra-objs += $(crti-objs) $(crtn-objs)
 omit-deps += crti crtn
 
-CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time)
+CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) \
+		       -fno-asynchronous-unwind-tables
 endif
 
 CFLAGS-flockfile.c = -D_IO_MTSAFE_IO
diff --git a/resolv/mapv4v6addr.h b/resolv/mapv4v6addr.h
index bc3290f162..7f85f7d5e3 100644
--- a/resolv/mapv4v6addr.h
+++ b/resolv/mapv4v6addr.h
@@ -56,16 +56,14 @@ static void
 map_v4v6_address (const char *src, char *dst)
 {
   u_char *p = (u_char *) dst;
-  char tmp[INADDRSZ];
   int i;
 
-  /* Stash a temporary copy so our caller can update in place. */
-  memcpy (tmp, src, INADDRSZ);
+  /* Move the IPv4 part to the right position.  */
+  memcpy (dst + 12, src, INADDRSZ);
+
   /* Mark this ipv6 addr as a mapped ipv4. */
   for (i = 0; i < 10; i++)
     *p++ = 0x00;
   *p++ = 0xff;
-  *p++ = 0xff;
-  /* Retrieve the saved copy and we're done. */
-  memcpy ((void *) p, tmp, INADDRSZ);
+  *p = 0xff;
 }
diff --git a/sunrpc/svc_run.c b/sunrpc/svc_run.c
index 017910b453..feb1bf958e 100644
--- a/sunrpc/svc_run.c
+++ b/sunrpc/svc_run.c
@@ -51,36 +51,51 @@ void
 svc_run (void)
 {
   int i;
+  struct pollfd *my_pollfd = NULL;
+  int last_max_pollfd = 0;
 
   for (;;)
     {
-      struct pollfd *my_pollfd;
+      int max_pollfd = svc_max_pollfd;
+      if (max_pollfd == 0 && svc_pollfd == NULL)
+	break;
 
-      if (svc_max_pollfd == 0 && svc_pollfd == NULL)
-	return;
+      if (last_max_pollfd != max_pollfd)
+	{
+	  struct pollfd *new_pollfd
+	    = realloc (my_pollfd, sizeof (struct pollfd) * max_pollfd);
+
+	  if (new_pollfd == NULL)
+	    {
+	      perror (_("svc_run: - out of memory"));
+	      break;
+	    }
+
+	  last_max_pollfd = max_pollfd;
+	}
 
-      my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd);
-      for (i = 0; i < svc_max_pollfd; ++i)
+      for (i = 0; i < max_pollfd; ++i)
 	{
 	  my_pollfd[i].fd = svc_pollfd[i].fd;
 	  my_pollfd[i].events = svc_pollfd[i].events;
 	  my_pollfd[i].revents = 0;
 	}
 
-      switch (i = __poll (my_pollfd, svc_max_pollfd, -1))
+      switch (i = __poll (my_pollfd, max_pollfd, -1))
 	{
 	case -1:
-	  free (my_pollfd);
 	  if (errno == EINTR)
 	    continue;
 	  perror (_("svc_run: - poll failed"));
-	  return;
+	  break;
 	case 0:
-	  free (my_pollfd);
 	  continue;
 	default:
 	  INTUSE(svc_getreq_poll) (my_pollfd, i);
-	  free (my_pollfd);
+	  continue;
 	}
+      break;
     }
+
+  free (my_pollfd);
 }
diff --git a/sysdeps/unix/sysv/linux/i386/getgroups.c b/sysdeps/unix/sysv/linux/i386/getgroups.c
index b7a0a4efd4..f69baf943b 100644
--- a/sysdeps/unix/sysv/linux/i386/getgroups.c
+++ b/sysdeps/unix/sysv/linux/i386/getgroups.c
@@ -52,8 +52,6 @@ __getgroups (int n, gid_t *groups)
     }
   else
     {
-      int i, ngids;
-      __kernel_gid_t kernel_groups[n = MIN (n, __sysconf (_SC_NGROUPS_MAX))];
 # ifdef __NR_getgroups32
       if (__libc_missing_32bit_uids <= 0)
 	{
@@ -69,6 +67,9 @@ __getgroups (int n, gid_t *groups)
 	}
 # endif /* __NR_getgroups32 */
 
+      int i, ngids;
+      __kernel_gid_t kernel_groups[n = MIN (n, __sysconf (_SC_NGROUPS_MAX))];
+
       ngids = INLINE_SYSCALL (getgroups, 2, n, CHECK_N (kernel_groups, n));
       if (n != 0 && ngids > 0)
 	for (i = 0; i < ngids; i++)