Fix: always close fd when destructing buffers

Also always rethrow exceptions not swallow them

Change-Id: I7a4b1e408858aa0d0128ca7bd6d6a7715662f9fb
diff --git a/driver_library/src/ethosu.cpp b/driver_library/src/ethosu.cpp
index 01631b3..2b1da45 100644
--- a/driver_library/src/ethosu.cpp
+++ b/driver_library/src/ethosu.cpp
@@ -148,7 +148,7 @@
     fd = eopen(device, O_RDWR | O_NONBLOCK);
 }
 
-Device::~Device() {
+Device::~Device() noexcept(false) {
     eclose(fd);
 }
 
@@ -185,18 +185,21 @@
         try {
             eclose(fd);
         } catch (...) { std::throw_with_nested(e); }
+        throw;
     }
     dataPtr = reinterpret_cast<char *>(d);
 }
 
-Buffer::~Buffer() {
+Buffer::~Buffer() noexcept(false) {
     try {
         emunmap(dataPtr, dataCapacity);
     } catch (std::exception &e) {
         try {
             eclose(fd);
         } catch (...) { std::throw_with_nested(e); }
+        throw;
     }
+    eclose(fd);
 }
 
 size_t Buffer::capacity() const {
@@ -250,6 +253,7 @@
         try {
             eclose(fd);
         } catch (...) { std::throw_with_nested(e); }
+        throw;
     }
 }
 
@@ -265,6 +269,7 @@
         try {
             eclose(fd);
         } catch (...) { std::throw_with_nested(e); }
+        throw;
     }
 }
 
@@ -281,7 +286,7 @@
     }
 }
 
-Network::~Network() {
+Network::~Network() noexcept(false) {
     eclose(fd);
 }
 
@@ -325,7 +330,7 @@
  * Inference
  ****************************************************************************/
 
-Inference::~Inference() {
+Inference::~Inference() noexcept(false) {
     eclose(fd);
 }