projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Mutex protected SigSession::_signals
[pulseview.git]
/
pv
/
sigsession.cpp
diff --git
a/pv/sigsession.cpp
b/pv/sigsession.cpp
index e8585c5f84db1465a8a482cbe6266eabc60e270f..63a683df8eb7a5310907b95154891728a42481f4 100644
(file)
--- a/
pv/sigsession.cpp
+++ b/
pv/sigsession.cpp
@@
-75,8
+75,9
@@
void SigSession::start_capture(struct sr_dev_inst *sdi,
record_length, sample_rate));
}
record_length, sample_rate));
}
-vector< shared_ptr<view::Signal> >
&
SigSession::get_signals()
+vector< shared_ptr<view::Signal> > SigSession::get_signals()
{
{
+ lock_guard<mutex> lock(_signals_mutex);
return _signals;
}
return _signals;
}
@@
-131,7
+132,7
@@
void SigSession::data_feed_in(const struct sr_dev_inst *sdi,
switch (packet->type) {
case SR_DF_HEADER:
{
switch (packet->type) {
case SR_DF_HEADER:
{
- lock_guard<mutex> lock(_
data
_mutex);
+ lock_guard<mutex> lock(_
signals
_mutex);
_signals.clear();
break;
}
_signals.clear();
break;
}
@@
-139,17
+140,21
@@
void SigSession::data_feed_in(const struct sr_dev_inst *sdi,
case SR_DF_META_LOGIC:
{
assert(packet->payload);
case SR_DF_META_LOGIC:
{
assert(packet->payload);
-
- lock_guard<mutex> lock(_data_mutex);
-
const sr_datafeed_meta_logic &meta_logic =
*(sr_datafeed_meta_logic*)packet->payload;
const sr_datafeed_meta_logic &meta_logic =
*(sr_datafeed_meta_logic*)packet->payload;
+ {
+ lock_guard<mutex> lock(_data_mutex);
+
// Create an empty LogiData for coming data snapshots
_logic_data.reset(new LogicData(meta_logic));
assert(_logic_data);
if(!_logic_data)
break;
// Create an empty LogiData for coming data snapshots
_logic_data.reset(new LogicData(meta_logic));
assert(_logic_data);
if(!_logic_data)
break;
+ }
+
+ {
+ lock_guard<mutex> lock(_signals_mutex);
// Add the signals
for (int i = 0; i < meta_logic.num_probes; i++)
// Add the signals
for (int i = 0; i < meta_logic.num_probes; i++)
@@
-170,6
+175,7
@@
void SigSession::data_feed_in(const struct sr_dev_inst *sdi,
signals_changed();
break;
}
signals_changed();
break;
}
+ }
case SR_DF_LOGIC:
{
case SR_DF_LOGIC:
{