device: destroy device objects on exit

This commit is contained in:
moneromooo-monero 2018-10-08 17:12:35 +00:00
parent e19652df51
commit 8f22e80865
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3
1 changed files with 16 additions and 9 deletions

View File

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