Merge "Double gBn/sConstructorMap"
diff --git a/Android.bp b/Android.bp
index e97c28c..f9b1e96 100644
--- a/Android.bp
+++ b/Android.bp
@@ -35,6 +35,7 @@
srcs: ["test_main.cpp"],
shared_libs: [
+ "android.hardware.tests.inheritance@1.0",
"libbase",
"libhidlbase",
"libhidltransport",
@@ -45,6 +46,10 @@
],
static_libs: ["libgtest", "libgmock"],
+ required: [
+ "android.hardware.tests.inheritance@1.0-impl",
+ ],
+
cflags: [
"-O0",
"-g",
diff --git a/base/Android.bp b/base/Android.bp
index 4505b5e..22f5ee1 100644
--- a/base/Android.bp
+++ b/base/Android.bp
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-cc_library_shared {
+cc_library {
name: "libhidlbase",
vendor_available: true,
vndk: {
diff --git a/base/include/hidl/HidlSupport.h b/base/include/hidl/HidlSupport.h
index 2be97c2..e60f2f3 100644
--- a/base/include/hidl/HidlSupport.h
+++ b/base/include/hidl/HidlSupport.h
@@ -303,11 +303,11 @@
// destructor
static sp<HidlMemory> getInstance(const hidl_string& name, int fd, uint64_t size);
+ virtual ~HidlMemory();
protected:
HidlMemory() : hidl_memory() {}
HidlMemory(const hidl_string& name, hidl_handle&& handle, size_t size)
: hidl_memory(name, std::move(handle), size) {}
- ~HidlMemory();
HidlMemory& operator=(hidl_memory&& src) {
hidl_memory::operator=(src);
return *this;
diff --git a/test_main.cpp b/test_main.cpp
index 2811612..0de46ec 100644
--- a/test_main.cpp
+++ b/test_main.cpp
@@ -17,12 +17,15 @@
#define LOG_TAG "LibHidlTest"
#include <android-base/logging.h>
-#include <condition_variable>
+#include <android/hardware/tests/inheritance/1.0/IParent.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <hidl/HidlSupport.h>
+#include <hidl/ServiceManagement.h>
#include <hidl/Status.h>
#include <hidl/TaskRunner.h>
+#include <condition_variable>
+#include <fstream>
#include <vector>
#define EXPECT_ARRAYEQ(__a1__, __a2__, __size__) EXPECT_TRUE(isArrayEqual(__a1__, __a2__, __size__))
@@ -46,6 +49,17 @@
return true;
}
+bool isLibraryOpen(const std::string& lib) {
+ std::ifstream ifs("/proc/self/maps");
+ for (std::string line; std::getline(ifs, line);) {
+ if (line.size() >= lib.size() && line.substr(line.size() - lib.size()) == lib) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
class LibHidlTest : public ::testing::Test {
public:
virtual void SetUp() override {
@@ -441,7 +455,17 @@
EXPECT_THAT(toString(Status::fromExceptionCode(Status::EX_NULL_POINTER)),
HasSubstr("EX_NULL_POINTER"));
+}
+TEST_F(LibHidlTest, PreloadTest) {
+ using ::android::hardware::preloadPassthroughService;
+ using ::android::hardware::tests::inheritance::V1_0::IParent;
+
+ static const std::string kLib = "android.hardware.tests.inheritance@1.0-impl.so";
+
+ EXPECT_FALSE(isLibraryOpen(kLib));
+ preloadPassthroughService<IParent>();
+ EXPECT_TRUE(isLibraryOpen(kLib));
}
int main(int argc, char **argv) {
diff --git a/transport/Android.bp b/transport/Android.bp
index e09cb4d..4821560 100644
--- a/transport/Android.bp
+++ b/transport/Android.bp
@@ -25,7 +25,7 @@
"token/1.0/utils",
]
-cc_library_shared {
+cc_library {
name: "libhidltransport",
vendor_available: true,
vndk: {