aboutsummaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2018-10-08 22:30:50 +0200
committerRiccardo Spagni <ric@spagni.net>2018-10-08 22:30:50 +0200
commit31155115d2bc090893e0da3296a3a364bc4083d6 (patch)
tree983006f77acf7f7e2d9d48aeedba6af01194d80f /src/device
parentMerge pull request #4530 (diff)
parentdevice: destroy device objects on exit (diff)
downloadmonero-31155115d2bc090893e0da3296a3a364bc4083d6.tar.xz
Merge pull request #4532
8f22e808 device: destroy device objects on exit (moneromooo-monero)
Diffstat (limited to 'src/device')
-rw-r--r--src/device/device.cpp25
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);
}