loader: fix d-tor call order
In the case when there are multiple dependencies on
the same library in the local_group the unload may
in some situations (covered now by tests) result
calling d-tors for some libraries prematurely.
In order to have correct call order loader checks if this
is last dependency in local group before adding it to BFS
queue.
Bug: http://b/35201832
Test: bionic-unit-tests --gtest_filter=dl*:Dl*
Test: bionic-unit-tests-glibc --gtest_filter=dl*
Change-Id: I4c6955b9032acc7147a51d9f09b61d9e0818700c
diff --git a/tests/libs/Android.bp b/tests/libs/Android.bp
index 31a0916..5eb16c5 100644
--- a/tests/libs/Android.bp
+++ b/tests/libs/Android.bp
@@ -448,13 +448,26 @@
}
// -----------------------------------------------------------------------------
-// Library used to check init/fini call order
+// Libraries used to check init/fini call order
// -----------------------------------------------------------------------------
cc_test_library {
name: "libtest_init_fini_order_root",
defaults: ["bionic_testlib_defaults"],
srcs: ["dlopen_check_init_fini_root.cpp"],
- shared_libs: ["libtest_init_fini_order_child"],
+ shared_libs: [
+ "libtest_init_fini_order_child",
+ "libtest_init_fini_order_grand_child",
+ ],
+}
+
+cc_test_library {
+ name: "libtest_init_fini_order_root2",
+ defaults: ["bionic_testlib_defaults"],
+ srcs: ["dlopen_check_init_fini_root.cpp"],
+ shared_libs: [
+ "libtest_init_fini_order_grand_child",
+ "libtest_init_fini_order_child",
+ ],
}
cc_test_library {