Fix issues around GoldfishAddressSpaceBlockProvider::open

Bug: 149254427
Test: host side tests
Merged-In: I16812a5a398fa72189c7d4fa18944ec1e31b72f2
Signed-off-by: Roman Kiryanov <rkir@google.com>
Change-Id: Ib9de7df1feca19ace7af7f782589afee3d00cb00
diff --git a/shared/OpenglCodecCommon/goldfish_address_space_android.impl b/shared/OpenglCodecCommon/goldfish_address_space_android.impl
index 96194bd..55b4a04 100644
--- a/shared/OpenglCodecCommon/goldfish_address_space_android.impl
+++ b/shared/OpenglCodecCommon/goldfish_address_space_android.impl
@@ -108,6 +108,7 @@
 }  // namespace
 
 GoldfishAddressSpaceBlockProvider::GoldfishAddressSpaceBlockProvider(GoldfishAddressSpaceSubdeviceType subdevice)
+    : m_handle(-1)
 {
     open(subdevice);
 }
diff --git a/shared/OpenglCodecCommon/goldfish_address_space_fuchsia.impl b/shared/OpenglCodecCommon/goldfish_address_space_fuchsia.impl
index cb2ce93..a264fe4 100644
--- a/shared/OpenglCodecCommon/goldfish_address_space_fuchsia.impl
+++ b/shared/OpenglCodecCommon/goldfish_address_space_fuchsia.impl
@@ -70,6 +70,11 @@
 {
 }
 
+bool GoldfishAddressSpaceBlockProvider::open(GoldfishAddressSpaceSubdeviceType subdevice) {
+    ALOGE("%s: not implemented\n", __func__);
+    abort();
+}
+
 bool GoldfishAddressSpaceBlockProvider::is_opened() const
 {
     return m_device.is_bound();
diff --git a/shared/OpenglCodecCommon/goldfish_address_space_host.impl b/shared/OpenglCodecCommon/goldfish_address_space_host.impl
index 5a5ee75..1cf6fa7 100644
--- a/shared/OpenglCodecCommon/goldfish_address_space_host.impl
+++ b/shared/OpenglCodecCommon/goldfish_address_space_host.impl
@@ -37,8 +37,17 @@
 using android::emulation::AddressSpaceDevicePingInfo;
 
 GoldfishAddressSpaceBlockProvider::GoldfishAddressSpaceBlockProvider(GoldfishAddressSpaceSubdeviceType subdevice)
-    : m_handle(HostAddressSpaceDevice::get()->open())
+    : m_handle(0)
 {
+    open(subdevice);
+}
+
+bool GoldfishAddressSpaceBlockProvider::open(GoldfishAddressSpaceSubdeviceType subdevice)
+{
+    close();
+
+    m_handle = HostAddressSpaceDevice::get()->open();
+
     if ((subdevice != GoldfishAddressSpaceSubdeviceType::NoSubdevice) && is_opened()) {
         AddressSpaceDevicePingInfo request;
         ::memset(&request, 0, sizeof(request));
@@ -46,6 +55,8 @@
 
         HostAddressSpaceDevice::get()->ping(m_handle, &request);
     }
+
+    return is_opened();
 }
 
 GoldfishAddressSpaceBlockProvider::~GoldfishAddressSpaceBlockProvider()