aboutsummaryrefslogtreecommitdiff
path: root/elf/dl-load.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/dl-load.c')
-rw-r--r--elf/dl-load.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 8a89b71016..c47ae093f3 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -429,23 +429,7 @@ add_name_to_object (struct link_map *l, const char *name)
newname->name = memcpy (newname + 1, name, name_len);
newname->next = NULL;
newname->dont_free = 0;
- /* CONCURRENCY NOTES:
-
- Make sure the initialization of newname happens before its address is
- read from the lastp->next store below.
-
- GL(dl_load_lock) is held here (and by other writers, e.g. dlclose), so
- readers of libname_list->next (e.g. _dl_check_caller or the reads above)
- can use that for synchronization, however the read in _dl_name_match_p
- may be executed without holding the lock during _dl_runtime_resolve
- (i.e. lazy symbol resolution when a function of library l is called).
-
- The release MO store below synchronizes with the acquire MO load in
- _dl_name_match_p. Other writes need to synchronize with that load too,
- however those happen either early when the process is single threaded
- (dl_main) or when the library is unloaded (dlclose) and the user has to
- synchronize library calls with unloading. */
- atomic_store_release (&lastp->next, newname);
+ lastp->next = newname;
}
/* Standard search directories. */