projects
/
pulseview.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
722930c
)
SigSession: Added signals_mutex(), and made signals() give a reference
author
Joel Holdsworth
<joel@airwebreathe.org.uk>
Sun, 5 Oct 2014 10:09:51 +0000
(11:09 +0100)
committer
Joel Holdsworth
<joel@airwebreathe.org.uk>
Wed, 19 Nov 2014 10:23:02 +0000
(10:23 +0000)
pv/popups/channels.cpp
patch
|
blob
|
history
pv/sigsession.cpp
patch
|
blob
|
history
pv/sigsession.h
patch
|
blob
|
history
pv/storesession.cpp
patch
|
blob
|
history
pv/view/decodetrace.cpp
patch
|
blob
|
history
pv/view/view.cpp
patch
|
blob
|
history
diff --git
a/pv/popups/channels.cpp
b/pv/popups/channels.cpp
index f6b5aa14e99317cb6d08e35f70d265e4ea5a6927..9afc3b48952754047eecce46b3f7aefb2630beb8 100644
(file)
--- a/
pv/popups/channels.cpp
+++ b/
pv/popups/channels.cpp
@@
-35,7
+35,9
@@
using namespace Qt;
using namespace Qt;
+using std::lock_guard;
using std::map;
using std::map;
+using std::mutex;
using std::set;
using std::shared_ptr;
using std::vector;
using std::set;
using std::shared_ptr;
using std::vector;
@@
-65,7
+67,9
@@
Channels::Channels(SigSession &session, QWidget *parent) :
// Collect a set of signals
map<shared_ptr<Channel>, shared_ptr<Signal> > signal_map;
// Collect a set of signals
map<shared_ptr<Channel>, shared_ptr<Signal> > signal_map;
- const vector< shared_ptr<Signal> > sigs = _session.get_signals();
+
+ lock_guard<mutex> lock(_session.signals_mutex());
+ const vector< shared_ptr<Signal> > &sigs(_session.signals());
for (const shared_ptr<Signal> &sig : sigs)
signal_map[sig->channel()] = sig;
for (const shared_ptr<Signal> &sig : sigs)
signal_map[sig->channel()] = sig;
diff --git
a/pv/sigsession.cpp
b/pv/sigsession.cpp
index d1f3a6062cde8b02f881bd9ffa33972edd39b5ef..9ff6efe4df6e5d00d00b21a5c41d68f0f4f79acc 100644
(file)
--- a/
pv/sigsession.cpp
+++ b/
pv/sigsession.cpp
@@
-239,9
+239,13
@@
set< shared_ptr<data::SignalData> > SigSession::get_data() const
return data;
}
return data;
}
-vector< shared_ptr<view::Signal> > SigSession::get_signals() const
+mutex& SigSession::signals_mutex() const
+{
+ return _signals_mutex;
+}
+
+const vector< shared_ptr<view::Signal> >& SigSession::signals() const
{
{
- lock_guard<mutex> lock(_signals_mutex);
return _signals;
}
return _signals;
}
diff --git
a/pv/sigsession.h
b/pv/sigsession.h
index 08a0fd0fadb5cbe23b89e8e93acea84dae027599..37ea3abcdcd936f636714d68d2a01915cfee2bda 100644
(file)
--- a/
pv/sigsession.h
+++ b/
pv/sigsession.h
@@
-104,8
+104,9
@@
public:
std::set< std::shared_ptr<data::SignalData> > get_data() const;
std::set< std::shared_ptr<data::SignalData> > get_data() const;
- std::vector< std::shared_ptr<view::Signal> >
- get_signals() const;
+ std::mutex& signals_mutex() const;
+
+ const std::vector< std::shared_ptr<view::Signal> >& signals() const;
#ifdef ENABLE_DECODE
bool add_decoder(srd_decoder *const dec);
#ifdef ENABLE_DECODE
bool add_decoder(srd_decoder *const dec);
diff --git
a/pv/storesession.cpp
b/pv/storesession.cpp
index 4de9d56dde2cc676899404a27040ab6ec88f0967..95b8da8738a33f8c808633df283b7190ea6b6d70 100644
(file)
--- a/
pv/storesession.cpp
+++ b/
pv/storesession.cpp
@@
-79,8
+79,9
@@
bool StoreSession::start()
{
set< shared_ptr<data::SignalData> > data_set =
_session.get_data();
{
set< shared_ptr<data::SignalData> > data_set =
_session.get_data();
- const vector< shared_ptr<view::Signal> > sigs =
- _session.get_signals();
+
+ lock_guard<mutex> lock(_session.signals_mutex());
+ const vector< shared_ptr<view::Signal> > &sigs(_session.signals());
// Check we have logic data
if (data_set.empty() || sigs.empty()) {
// Check we have logic data
if (data_set.empty() || sigs.empty()) {
diff --git
a/pv/view/decodetrace.cpp
b/pv/view/decodetrace.cpp
index 899de3b238743f320d638c87308719f9f961ddc7..138ba0a14263fc92e0ce09cb74232f227d0b0c22 100644
(file)
--- a/
pv/view/decodetrace.cpp
+++ b/
pv/view/decodetrace.cpp
@@
-22,6
+22,8
@@
extern "C" {
#include <libsigrokdecode/libsigrokdecode.h>
}
#include <libsigrokdecode/libsigrokdecode.h>
}
+#include <mutex>
+
#include <extdef.h>
#include <tuple>
#include <extdef.h>
#include <tuple>
@@
-53,10
+55,12
@@
extern "C" {
using std::dynamic_pointer_cast;
using std::list;
using std::dynamic_pointer_cast;
using std::list;
+using std::lock_guard;
using std::make_pair;
using std::max;
using std::map;
using std::min;
using std::make_pair;
using std::max;
using std::map;
using std::min;
+using std::mutex;
using std::pair;
using std::shared_ptr;
using std::tie;
using std::pair;
using std::shared_ptr;
using std::tie;
@@
-692,7
+696,8
@@
QComboBox* DecodeTrace::create_channel_selector(
{
assert(dec);
{
assert(dec);
- const vector< shared_ptr<Signal> > sigs = _session.get_signals();
+ lock_guard<mutex> lock(_session.signals_mutex());
+ const vector< shared_ptr<Signal> > &sigs(_session.signals());
assert(_decoder_stack);
const auto channel_iter = dec->channels().find(pdch);
assert(_decoder_stack);
const auto channel_iter = dec->channels().find(pdch);
@@
-725,7
+730,9
@@
void DecodeTrace::commit_decoder_channels(shared_ptr<data::decode::Decoder> &dec
assert(dec);
map<const srd_channel*, shared_ptr<LogicSignal> > channel_map;
assert(dec);
map<const srd_channel*, shared_ptr<LogicSignal> > channel_map;
- const vector< shared_ptr<Signal> > sigs = _session.get_signals();
+
+ lock_guard<mutex> lock(_session.signals_mutex());
+ const vector< shared_ptr<Signal> > &sigs(_session.signals());
for (const ChannelSelector &s : _channel_selectors)
{
for (const ChannelSelector &s : _channel_selectors)
{
diff --git
a/pv/view/view.cpp
b/pv/view/view.cpp
index fae74f8f5739600ab8ffedd5aee153b313d5e44b..079d8d89b38ffaec8e42b1c6a7f173e56a46bb30 100644
(file)
--- a/
pv/view/view.cpp
+++ b/
pv/view/view.cpp
@@
-22,9
+22,10
@@
#include <libsigrokdecode/libsigrokdecode.h>
#endif
#include <libsigrokdecode/libsigrokdecode.h>
#endif
-#include <assert.h>
-#include <limits.h>
-#include <math.h>
+#include <cassert>
+#include <climits>
+#include <cmath>
+#include <mutex>
#include <QEvent>
#include <QMouseEvent>
#include <QEvent>
#include <QMouseEvent>
@@
-46,9
+47,11
@@
using pv::data::SignalData;
using std::back_inserter;
using std::deque;
using std::list;
using std::back_inserter;
using std::deque;
using std::list;
+using std::lock_guard;
using std::max;
using std::make_pair;
using std::min;
using std::max;
using std::make_pair;
using std::min;
+using std::mutex;
using std::pair;
using std::set;
using std::shared_ptr;
using std::pair;
using std::set;
using std::shared_ptr;
@@
-214,9
+217,6
@@
void View::zoom_one_to_one()
{
using pv::data::SignalData;
{
using pv::data::SignalData;
- const vector< shared_ptr<Signal> > sigs(
- session().get_signals());
-
// Make a set of all the visible data objects
set< shared_ptr<SignalData> > visible_data = get_visible_data();
if (visible_data.empty())
// Make a set of all the visible data objects
set< shared_ptr<SignalData> > visible_data = get_visible_data();
if (visible_data.empty())
@@
-273,8
+273,8
@@
list<weak_ptr<SelectableItem> > View::selected_items() const
set< shared_ptr<SignalData> > View::get_visible_data() const
{
set< shared_ptr<SignalData> > View::get_visible_data() const
{
- const vector< shared_ptr<Signal> > sigs(
-
session().get_
signals());
+ lock_guard<mutex> lock(session().signals_mutex());
+
const vector< shared_ptr<Signal> > &sigs(session().
signals());
// Make a set of all the visible data objects
set< shared_ptr<SignalData> > visible_data;
// Make a set of all the visible data objects
set< shared_ptr<SignalData> > visible_data;
@@
-522,8
+522,8
@@
void View::signals_changed()
// Populate the traces
clear_child_items();
// Populate the traces
clear_child_items();
- const vector< shared_ptr<Signal> > sigs(
-
session().get_
signals());
+ lock_guard<mutex> lock(session().signals_mutex());
+
const vector< shared_ptr<Signal> > &sigs(session().
signals());
for (auto s : sigs)
add_child_item(s);
for (auto s : sigs)
add_child_item(s);