Skip to content

Commit

Permalink
[BZ #3429]
Browse files Browse the repository at this point in the history
2006-10-27  Ulrich Drepper  <drepper@redhat.com>
	[BZ #3429]
	* 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
	the asserts inside the lock region.
	Patch mostly by Suzuki <suzuki@in.ibm.com>.
  • Loading branch information
Ulrich Drepper committed Oct 27, 2006
1 parent c0a777e commit b2369ca
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 10 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
2006-10-27 Ulrich Drepper <drepper@redhat.com>

[BZ #3429]
* 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
the asserts inside the lock region.
Patch mostly by Suzuki <suzuki@in.ibm.com>.

2006-10-27 Jakub Jelinek <jakub@redhat.com>

* elf/dl-lookup.c (_dl_debug_bindings): Remove unised symbol_scope
Expand Down
21 changes: 11 additions & 10 deletions elf/dl-open.c
Original file line number Diff line number Diff line change
Expand Up @@ -567,15 +567,9 @@ no more namespaces available for dlmopen()"));
_dl_unload_cache ();
#endif

/* Release the lock. */
__rtld_lock_unlock_recursive (GL(dl_load_lock));

/* See if an error occurred during loading. */
if (__builtin_expect (errstring != NULL, 0))
{
/* Some error occurred during loading. */
char *local_errstring;
size_t len_errstring;

/* Remove the object from memory. It may be in an inconsistent
state if relocation failed, for example. */
if (args.map)
Expand All @@ -595,9 +589,15 @@ no more namespaces available for dlmopen()"));
_dl_close (args.map);
}

assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT);

/* Release the lock. */
__rtld_lock_unlock_recursive (GL(dl_load_lock));

/* Make a local copy of the error string so that we can release the
memory allocated for it. */
len_errstring = strlen (errstring) + 1;
size_t len_errstring = strlen (errstring) + 1;
char *local_errstring;
if (objname == errstring + len_errstring)
{
size_t total_len = len_errstring + strlen (objname) + 1;
Expand All @@ -614,14 +614,15 @@ no more namespaces available for dlmopen()"));
if (malloced)
free ((char *) errstring);

assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT);

/* Reraise the error. */
_dl_signal_error (errcode, objname, NULL, local_errstring);
}

assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT);

/* Release the lock. */
__rtld_lock_unlock_recursive (GL(dl_load_lock));

#ifndef SHARED
DL_STATIC_INIT (args.map);
#endif
Expand Down

0 comments on commit b2369ca

Please sign in to comment.