From 79abce42146b27d523f309e0a1bc9f50175191cb Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Wed, 13 Apr 2016 11:46:59 -0700 Subject: [PATCH] linker: unload RTLD_NODELETE libraries when loading fails Linker was not unloading libraries marked with RTLD_NODELETE even when there was a error on load. For example when one of dt_needed libraries was not found. Bug: http://b/27911891 Change-Id: Ibc0bf110aa41fbfdc9f327ad8c364f2e3600af71 --- linker/linker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index dfa3d21c6..a4dae3ef7 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -3322,7 +3322,7 @@ bool soinfo::is_gnu_hash() const { } bool soinfo::can_unload() const { - return (get_rtld_flags() & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; + return !is_linked() || ((get_rtld_flags() & (RTLD_NODELETE | RTLD_GLOBAL)) == 0); } bool soinfo::is_linked() const { -- 2.11.0