mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
* elf/dl-close.c (_dl_close_worker): Renamed from _dl_close and
split out locking and parameter checking. (_dl_close): Call _dl_close_worker after locking and checking. * elf/dl-open.c (_dl_open): Call _dl_close_worker instead of _dl_close. we are sure we do not need it anymore for _dl_close. Also move * elf/dl-lookup.c (_dl_debug_bindings): Remove unused symbol_scope
This commit is contained in:
parent
4de0b4abf5
commit
131c4428c6
10
ChangeLog
10
ChangeLog
@ -1,18 +1,24 @@
|
|||||||
2006-10-27 Ulrich Drepper <drepper@redhat.com>
|
2006-10-27 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* elf/dl-close.c (_dl_close_worker): Renamed from _dl_close and
|
||||||
|
split out locking and parameter checking.
|
||||||
|
(_dl_close): Call _dl_close_worker after locking and checking.
|
||||||
|
* elf/dl-open.c (_dl_open): Call _dl_close_worker instead of
|
||||||
|
_dl_close.
|
||||||
|
|
||||||
[BZ #3426]
|
[BZ #3426]
|
||||||
* stdlib/stdlib.h: Adjust comment for canonicalize_file_name to
|
* stdlib/stdlib.h: Adjust comment for canonicalize_file_name to
|
||||||
reality.
|
reality.
|
||||||
|
|
||||||
[BZ #3429]
|
[BZ #3429]
|
||||||
* elf/dl-open.c (dl_open_worker): Keep holding dl_load_lock until
|
* elf/dl-open.c (dl_open_worker): Keep holding dl_load_lock until
|
||||||
we are sure we do not need it anymore for _dl_close. ALso move
|
we are sure we do not need it anymore for _dl_close. Also move
|
||||||
the asserts inside the lock region.
|
the asserts inside the lock region.
|
||||||
Patch mostly by Suzuki <suzuki@in.ibm.com>.
|
Patch mostly by Suzuki <suzuki@in.ibm.com>.
|
||||||
|
|
||||||
2006-10-27 Jakub Jelinek <jakub@redhat.com>
|
2006-10-27 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* elf/dl-lookup.c (_dl_debug_bindings): Remove unised symbol_scope
|
* elf/dl-lookup.c (_dl_debug_bindings): Remove unused symbol_scope
|
||||||
argument.
|
argument.
|
||||||
(_dl_lookup_symbol_x): Adjust caller.
|
(_dl_lookup_symbol_x): Adjust caller.
|
||||||
|
|
||||||
|
@ -107,19 +107,10 @@ remove_slotinfo (size_t idx, struct dtv_slotinfo_list *listp, size_t disp,
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_dl_close (void *_map)
|
_dl_close_worker (struct link_map *map)
|
||||||
{
|
{
|
||||||
struct link_map *map = _map;
|
|
||||||
Lmid_t ns = map->l_ns;
|
Lmid_t ns = map->l_ns;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
/* First see whether we can remove the object at all. */
|
|
||||||
if (__builtin_expect (map->l_flags_1 & DF_1_NODELETE, 0)
|
|
||||||
&& map->l_init_called)
|
|
||||||
/* Nope. Do nothing. */
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (__builtin_expect (map->l_direct_opencount, 1) == 0)
|
|
||||||
GLRO(dl_signal_error) (0, map->l_name, NULL, N_("shared object not open"));
|
|
||||||
|
|
||||||
/* Acquire the lock. */
|
/* Acquire the lock. */
|
||||||
__rtld_lock_lock_recursive (GL(dl_load_lock));
|
__rtld_lock_lock_recursive (GL(dl_load_lock));
|
||||||
@ -143,7 +134,6 @@ _dl_close (void *_map)
|
|||||||
_dl_debug_printf ("\nclosing file=%s; direct_opencount=%u\n",
|
_dl_debug_printf ("\nclosing file=%s; direct_opencount=%u\n",
|
||||||
map->l_name, map->l_direct_opencount);
|
map->l_name, map->l_direct_opencount);
|
||||||
|
|
||||||
__rtld_lock_unlock_recursive (GL(dl_load_lock));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,6 +688,30 @@ _dl_close (void *_map)
|
|||||||
goto retry;
|
goto retry;
|
||||||
|
|
||||||
dl_close_state = not_pending;
|
dl_close_state = not_pending;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
_dl_close (void *_map)
|
||||||
|
{
|
||||||
|
struct link_map *map = _map;
|
||||||
|
|
||||||
|
/* First see whether we can remove the object at all. */
|
||||||
|
if (__builtin_expect (map->l_flags_1 & DF_1_NODELETE, 0))
|
||||||
|
{
|
||||||
|
assert (map->l_init_called);
|
||||||
|
/* Nope. Do nothing. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (__builtin_expect (map->l_direct_opencount, 1) == 0)
|
||||||
|
GLRO(dl_signal_error) (0, map->l_name, NULL, N_("shared object not open"));
|
||||||
|
|
||||||
|
/* Acquire the lock. */
|
||||||
|
__rtld_lock_lock_recursive (GL(dl_load_lock));
|
||||||
|
|
||||||
|
_dl_close_worker (map);
|
||||||
|
|
||||||
__rtld_lock_unlock_recursive (GL(dl_load_lock));
|
__rtld_lock_unlock_recursive (GL(dl_load_lock));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -586,7 +586,7 @@ no more namespaces available for dlmopen()"));
|
|||||||
GL(dl_tls_dtv_gaps) = true;
|
GL(dl_tls_dtv_gaps) = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_dl_close (args.map);
|
_dl_close_worker (args.map);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT);
|
assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT);
|
||||||
|
Loading…
Reference in New Issue
Block a user