aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Ivanov <dimitry@google.com>2017-04-19 11:28:16 -0700
committerDimitry Ivanov <dimitry@google.com>2017-05-15 21:23:32 -0700
commitb37d10cc8017c102530c096537890b7c6215ad2b (patch)
tree86aac9fbcd947a64c8afaa50f208da9da67e3e34
parentf3537c61bffeb32ef6c077c8fc9f209d729d77eb (diff)
downloadbionic-b37d10cc8017c102530c096537890b7c6215ad2b.tar.gz
linker: remove link from external library on unload
When unloading library make sure the soinfo_link to parent from linked external libraries is removed as well. Bug: 36104177 Bug: http://b/37433850 Test: manual Change-Id: I601b54144acecac54744805b38313c46045c54cb (cherry picked from commit ee398f820700de30941fd82e38bd917e1513cbc6)
-rw-r--r--linker/linker.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 39aa2caec..a287cf453 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -2239,6 +2239,9 @@ static void soinfo_unload(soinfo* soinfos[], size_t count) {
if (local_unload_list.contains(child)) {
continue;
} else if (child->is_linked() && child->get_local_group_root() != root) {
+ child->get_parents().remove_if([&] (const soinfo* parent) {
+ return parent == si;
+ });
external_unload_list.push_back(child);
} else {
unload_list.push_front(child);