device: destroy device objects on exit
This commit is contained in:
parent
e19652df51
commit
8f22e80865
|
@ -41,13 +41,26 @@ namespace hw {
|
||||||
/* SETUP */
|
/* 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(){
|
device_registry::device_registry(){
|
||||||
hw::core::register_all(registry);
|
hw::core::register_all(registry);
|
||||||
#ifdef WITH_DEVICE_LEDGER
|
#ifdef WITH_DEVICE_LEDGER
|
||||||
hw::ledger::register_all(registry);
|
hw::ledger::register_all(registry);
|
||||||
#endif
|
#endif
|
||||||
|
atexit(clear_device_registry);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool device_registry::register_device(const std::string & device_name, device * hw_device){
|
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) {
|
device& get_device(const std::string & device_descriptor) {
|
||||||
if (!registry){
|
device_registry *registry = get_device_registry();
|
||||||
registry.reset(new device_registry());
|
|
||||||
}
|
|
||||||
|
|
||||||
return registry->get_device(device_descriptor);
|
return registry->get_device(device_descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool register_device(const std::string & device_name, device * hw_device){
|
bool register_device(const std::string & device_name, device * hw_device){
|
||||||
if (!registry){
|
device_registry *registry = get_device_registry();
|
||||||
registry.reset(new device_registry());
|
|
||||||
}
|
|
||||||
|
|
||||||
return registry->register_device(device_name, hw_device);
|
return registry->register_device(device_name, hw_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue