diff options
author | Riccardo Spagni <ric@spagni.net> | 2018-10-08 22:30:50 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2018-10-08 22:30:50 +0200 |
commit | 31155115d2bc090893e0da3296a3a364bc4083d6 (patch) | |
tree | 983006f77acf7f7e2d9d48aeedba6af01194d80f | |
parent | Merge pull request #4530 (diff) | |
parent | device: destroy device objects on exit (diff) | |
download | monero-31155115d2bc090893e0da3296a3a364bc4083d6.tar.xz |
Merge pull request #4532
8f22e808 device: destroy device objects on exit (moneromooo-monero)
-rw-r--r-- | src/device/device.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/device/device.cpp b/src/device/device.cpp index 50041baef..d5e3031ff 100644 --- a/src/device/device.cpp +++ b/src/device/device.cpp @@ -41,13 +41,26 @@ namespace hw { /* SETUP */ /* ======================================================================= */ - static std::unique_ptr<device_registry> registry; + static device_registry *get_device_registry(bool clear = false){ + static device_registry *registry = new device_registry(); + if (clear) + { + delete registry; + registry = NULL; + } + return registry; + } + + static void clear_device_registry(){ + get_device_registry(true); + } device_registry::device_registry(){ hw::core::register_all(registry); #ifdef WITH_DEVICE_LEDGER hw::ledger::register_all(registry); #endif + atexit(clear_device_registry); } bool device_registry::register_device(const std::string & device_name, device * hw_device){ @@ -80,18 +93,12 @@ namespace hw { } device& get_device(const std::string & device_descriptor) { - if (!registry){ - registry.reset(new device_registry()); - } - + device_registry *registry = get_device_registry(); return registry->get_device(device_descriptor); } bool register_device(const std::string & device_name, device * hw_device){ - if (!registry){ - registry.reset(new device_registry()); - } - + device_registry *registry = get_device_registry(); return registry->register_device(device_name, hw_device); } |