Triggered when opening a file from the command line.
During startup Sigsession::set_default_device calls Device::use which
loads a global _sr_session, then as part of file loading the
File::create method is called which treats _sr_session as a temp
variable (loaded then immediately released), finally a Device::release
releases the (differently allocated) global _sr_session again causing
the double free.
Given File::create is only using the sigrok session temporarily within
its function scope, this change gives it its own temporary session
instance.
This fixes bug #405.
File* File::create(const string &name)
{
- if (sr_session_load(name.c_str(), &SigSession::_sr_session) == SR_OK) {
+ struct sr_session *temp_session;
+ if (sr_session_load(name.c_str(), &temp_session) == SR_OK) {
GSList *devlist = NULL;
- sr_session_dev_list(SigSession::_sr_session, &devlist);
- sr_session_destroy(SigSession::_sr_session);
+ sr_session_dev_list(temp_session, &devlist);
+ sr_session_destroy(temp_session);
if (devlist) {
sr_dev_inst *const sdi = (sr_dev_inst*)devlist->data;