summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-05-24 10:33:02 +0000
committerJakub Jelinek <jakub@redhat.com>2007-05-24 10:33:02 +0000
commit619b79105b34179aab8ade7f232e2cfc505a22ed (patch)
tree265582300d98ffe130b2e76ff46f50834e6cdaa1
parent75831cc48d3fef9b0bb247aabbcdaceef85efa23 (diff)
-rw-r--r--ChangeLog6
-rw-r--r--elf/dl-open.c10
-rw-r--r--fedora/build-locale-archive.c2
-rw-r--r--fedora/glibc.spec.in10
-rw-r--r--nptl/ChangeLog6
-rw-r--r--nptl/pthread_create.c24
6 files changed, 52 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 34b411dfca..34814c4677 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-01-15 Jakub Jelinek <jakub@redhat.com>
+
+ * elf/dl-open.c (add_to_global): If the main searchlist is 256
+ entries or more, on each reallocation at least double the size
+ of the search list rather than growing it linearly.
+
2007-05-21 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/epoll_pwait.S: New file.
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 583878781e..0afe94b5bf 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -125,14 +125,18 @@ add_to_global (struct link_map *new)
{
/* We have to extend the existing array of link maps in the
main map. */
+ size_t new_size = ns->_ns_global_scope_alloc;
+ if (new_size >= 256 && new_size > to_add + 8)
+ new_size *= 2;
+ else
+ new_size += to_add + 8;
new_global = (struct link_map **)
realloc (ns->_ns_main_searchlist->r_list,
- ((ns->_ns_global_scope_alloc + to_add + 8)
- * sizeof (struct link_map *)));
+ new_size * sizeof (struct link_map *));
if (new_global == NULL)
goto nomem;
- ns->_ns_global_scope_alloc += to_add + 8;
+ ns->_ns_global_scope_alloc = new_size;
ns->_ns_main_searchlist->r_list = new_global;
}
diff --git a/fedora/build-locale-archive.c b/fedora/build-locale-archive.c
index ef0ac91ba7..afe0cbdaae 100644
--- a/fedora/build-locale-archive.c
+++ b/fedora/build-locale-archive.c
@@ -618,7 +618,7 @@ int main ()
closedir (dirp);
fill_archive (&tmpl_ah, cnt, list, primary);
close_archive (&tmpl_ah);
- unlink (tmpl_file);
+ truncate (tmpl_file, 0);
char *argv[] = { "/usr/sbin/tzdata-update", NULL };
execve (argv[0], (char *const *)argv, (char *const *)&argv[1]);
exit (0);
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index 201d0753ac..18d04c8868 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -1,4 +1,4 @@
-%define glibcrelease 2
+%define glibcrelease 3
%define auxarches i586 i686 athlon sparcv9 alphaev6
%define xenarches i686 athlon
%ifarch %{xenarches}
@@ -1506,7 +1506,7 @@ rm -f *.filelist*
%files -f common.filelist common
%defattr(-,root,root)
%dir %{_prefix}/lib/locale
-%attr(0644,root,root) %config(missingok) %{_prefix}/lib/locale/locale-archive.tmpl
+%attr(0644,root,root) %verify(not md5 size mtime) %{_prefix}/lib/locale/locale-archive.tmpl
%attr(0644,root,root) %verify(not md5 size mtime mode) %ghost %config(missingok,noreplace) %{_prefix}/lib/locale/locale-archive
%dir %attr(755,root,root) /etc/default
%verify(not md5 size mtime) %config(noreplace) /etc/default/nss
@@ -1561,6 +1561,12 @@ rm -f *.filelist*
%endif
%changelog
+* Thu May 24 2007 Jakub Jelinek <jakub@redhat.com> 2.6-3
+- don't use %%config(missingok) for locale-archive.tmpl,
+ instead of removing it altogether truncate it to zero
+ size (#240697)
+- add a workaround for #210748
+
* Mon May 21 2007 Jakub Jelinek <jakub@redhat.com> 2.6-2
- restore malloc_set_state backwards compatibility (#239344)
- fix epoll_pwait (BZ#4525)
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 9b5ac1053e..8ba39eafb9 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,9 @@
+2007-01-15 Jakub Jelinek <jakub@redhat.com>
+
+ * pthread_create.c (__pthread_create_2_1): On the first pthread_create
+ in a process make sure main search list can store at least 256
+ entries.
+
2007-05-17 Ulrich Drepper <drepper@redhat.com>
[BZ #4512]
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 79729ced03..22e8f01804 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -462,6 +462,30 @@ __pthread_create_2_1 (newthread, attr, start_routine, arg)
pd->flags = ((iattr->flags & ~(ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET))
| (self->flags & (ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET)));
+ /* Hack: realloc the main search list on the first pthread_create call
+ to minimize the number of global search scope reallocations.
+ Wastes at most 1KB on 32-bit and 2KB on 64-bit per process
+ which calls pthread_create. */
+ if (__builtin_expect (self->header.multiple_threads == 0, 0)
+ && GL(dl_ns)[0]._ns_main_searchlist
+ && GL(dl_ns)[0]._ns_main_searchlist->r_nlist < 256
+ && GL(dl_ns)[0]._ns_global_scope_alloc < 256)
+ {
+ struct link_map **new_global = (struct link_map **)
+ realloc (GL(dl_ns)[0]._ns_global_scope_alloc == 0
+ ? NULL : GL(dl_ns)[0]._ns_main_searchlist->r_list,
+ 256 * sizeof (struct link_map *));
+ if (new_global != NULL)
+ {
+ if (GL(dl_ns)[0]._ns_global_scope_alloc == 0)
+ memcpy (new_global, GL(dl_ns)[0]._ns_main_searchlist->r_list,
+ GL(dl_ns)[0]._ns_main_searchlist->r_nlist
+ * sizeof (struct link_map *));
+ GL(dl_ns)[0]._ns_global_scope_alloc = 256;
+ GL(dl_ns)[0]._ns_main_searchlist->r_list = new_global;
+ }
+ }
+
/* Initialize the field for the ID of the thread which is waiting
for us. This is a self-reference in case the thread is created
detached. */