summaryrefslogtreecommitdiff
path: root/linker/linker.cpp
diff options
context:
space:
mode:
authorDimitry Ivanov <dimitry@google.com>2017-02-11 05:50:53 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-02-11 05:50:55 +0000
commitc9fb1774c5696d4565042ee80df4cc721dd33153 (patch)
treeda59fda3b0eac92d43fe86dc457506a11382953c /linker/linker.cpp
parent132768084e24119c337e56fd110b97a23e5593c2 (diff)
parentec90e24d33837e107b45e7c98b2f5fb4bc115a5e (diff)
Merge "loader: fix d-tor call order"
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r--linker/linker.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 522d5dc1a..ece61873a 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -1661,12 +1661,14 @@ static void soinfo_unload(soinfo* soinfos[], size_t count) {
TRACE("%s@%p needs to unload %s@%p", si->get_realpath(), si,
child->get_realpath(), child);
+ child->get_parents().remove(si);
+
if (local_unload_list.contains(child)) {
continue;
} else if (child->is_linked() && child->get_local_group_root() != root) {
external_unload_list.push_back(child);
- } else {
- unload_list.push_front(child);
+ } else if (child->get_parents().empty()) {
+ unload_list.push_back(child);
}
}
} else {