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);
}