From b928447d6ecda0e4c4c2b23092a3af0c65547826 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Wed, 19 Apr 2017 11:28:16 -0700 Subject: 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) (cherry picked from commit b37d10cc8017c102530c096537890b7c6215ad2b) --- linker/linker.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/linker/linker.cpp b/linker/linker.cpp index 9dc928eb4..a043b859a 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2246,6 +2246,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); -- cgit v1.2.3