void DeviceManager::release_devices() { // Release all the used devices for (map<sr_dev_inst*, SigSession*>::iterator i = _used_devices.begin(); i != _used_devices.end();) release_device((*i++).first); _used_devices.clear(); // Clear all the drivers sr_dev_driver **const drivers = sr_driver_list(); for (sr_dev_driver **driver = drivers; *driver; driver++) sr_dev_clear(*driver); }
/** * Standard driver cleanup() callback API helper * * @param di The driver instance to use. * * Frees all device instances by calling sr_dev_clear() and then releases any * resources allocated by std_init(). * * @retval SR_OK Success * @retval SR_ERR_ARG Invalid driver * */ SR_PRIV int std_cleanup(const struct sr_dev_driver *di) { int ret; ret = sr_dev_clear(di); g_free(di->context); return ret; }
void SessionFile::release() { if (!_owner) return; assert(_sdi); File::release(); sr_dev_close(_sdi); sr_dev_clear(_sdi->driver); sr_session_destroy(); _sdi = NULL; }
File* File::create(QString name) { if (sr_session_load(name.toLocal8Bit().data()) == SR_OK) { GSList *devlist = NULL; sr_session_dev_list(&devlist); sr_session_destroy(); if (devlist) { sr_dev_inst *const sdi = (sr_dev_inst*)devlist->data; g_slist_free(devlist); if (sdi) { sr_dev_close(sdi); sr_dev_clear(sdi->driver); return new SessionFile(name); } } } return new InputFile(name); }
File* File::create(const string &name) { struct sr_session *temp_session; if (sr_session_load(name.c_str(), &temp_session) == SR_OK) { GSList *devlist = NULL; sr_session_dev_list(temp_session, &devlist); sr_session_destroy(temp_session); if (devlist) { sr_dev_inst *const sdi = (sr_dev_inst*)devlist->data; g_slist_free(devlist); if (sdi) { sr_dev_close(sdi); sr_dev_clear(sdi->driver); return new SessionFile(name); } } } return NULL; }
void DeviceManager::release_driver(struct sr_dev_driver *const driver) { assert(driver); // map<sr_dev_inst*, SigSession*>::iterator i = _used_devices.begin(); // while(i != _used_devices.end()) { // if((*i).first->driver == driver) // { // // Notify the current owner of the device // (*i).second->release_device((*i).first); // // Close the device instance // sr_dev_close((*i).first); // // Remove it from the used device list // i = _used_devices.erase(i); // } else { // i++; // } // } for (map<sr_dev_inst*, SigSession*>::iterator i = _used_devices.begin(); i != _used_devices.end();) if((*i).first->driver == driver) { // Notify the current owner of the device (*i).second->release_device((*i).first); // Close the device instance sr_dev_close((*i).first); // Remove it from the used device list _used_devices.erase(i++); } else { i++; } // Clear all the old device instances from this driver sr_dev_clear(driver); }