-bool DeviceManager::compare_devices(const sr_dev_inst *const a,
- const sr_dev_inst *const b)
+void DeviceManager::release_driver(struct sr_dev_driver *const driver)
+{
+ assert(driver);
+ for (map<shared_ptr<device::DevInst>, SigSession*>::iterator i =
+ _used_devices.begin(); i != _used_devices.end(); i++)
+ if((*i).first->dev_inst()->driver == driver)
+ {
+ // Notify the current owner of the device
+ (*i).second->release_device((*i).first);
+
+ // Remove it from the used device list
+ _used_devices.erase(i);
+
+ // Close the device instance
+ sr_dev_close((*i).first->dev_inst());
+ }
+
+ // Clear all the old device instances from this driver
+ sr_dev_clear(driver);
+}
+
+bool DeviceManager::compare_devices(shared_ptr<device::DevInst> a,
+ shared_ptr<device::DevInst> b)