From 404bc9c8be6fd12a2861e818f8f6f5935eb83ea7 Mon Sep 17 00:00:00 2001 From: Niklas Eiling Date: Fri, 2 Dec 2022 13:31:03 +0100 Subject: [PATCH] fix throwing an error in villas-fpga-cat leading to abort, because of wrong deconstructor order Signed-off-by: Niklas Eiling --- fpga/common | 2 +- fpga/src/villas-fpga-cat.cpp | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/fpga/common b/fpga/common index b7e176fdb..8dcf83bf0 160000 --- a/fpga/common +++ b/fpga/common @@ -1 +1 @@ -Subproject commit b7e176fdb69025a2bdb9fa27efa7d3b524a905cd +Subproject commit 8dcf83bf0fbc258bb54db2434df796255119213f diff --git a/fpga/src/villas-fpga-cat.cpp b/fpga/src/villas-fpga-cat.cpp index 5df9e7ba3..cb521ea0f 100644 --- a/fpga/src/villas-fpga-cat.cpp +++ b/fpga/src/villas-fpga-cat.cpp @@ -72,6 +72,13 @@ int main(int argc, char* argv[]) return 1; } + //FIXME: This must be called before card is intialized, because the card descructor + // still accesses the allocated memory. This order ensures that the allocator + // is destroyed AFTER the card. + auto &alloc = villas::HostRam::getAllocator(); + villas::MemoryAccessor mem[] = {alloc.allocate(0x200), alloc.allocate(0x200)}; + const villas::MemoryBlock block[] = {mem[0].getMemoryBlock(), mem[1].getMemoryBlock()}; + auto card = fpga::setupFpgaCard(configFile, fpgaName); std::vector aurora_channels; @@ -104,10 +111,6 @@ int main(int argc, char* argv[]) #else dma->connectLoopback(); #endif - auto &alloc = villas::HostRam::getAllocator(); - villas::MemoryAccessor mem[] = {alloc.allocate(0x200), alloc.allocate(0x200)}; - const villas::MemoryBlock block[] = {mem[0].getMemoryBlock(), mem[1].getMemoryBlock()}; - for (auto b : block) { dma->makeAccesibleFromVA(b); } @@ -152,6 +155,12 @@ int main(int argc, char* argv[]) return -1; } catch (const CLI::ParseError &e) { return app.exit(e); + } catch (const std::exception &e) { + logger->error("Error: {}", e.what()); + return -1; + } catch (...) { + logger->error("Unknown error"); + return -1; } return 0;