#include <libsigrok/libsigrok.hpp>
+using boost::shared_lock;
+using boost::shared_mutex;
+using boost::unique_lock;
+
using std::dynamic_pointer_cast;
using std::function;
using std::lock_guard;
-using std::mutex;
using std::list;
using std::map;
+using std::mutex;
using std::set;
using std::shared_ptr;
using std::string;
set< shared_ptr<data::SignalData> > SigSession::get_data() const
{
- lock_guard<mutex> lock(_signals_mutex);
+ shared_lock<shared_mutex> lock(_signals_mutex);
set< shared_ptr<data::SignalData> > data;
for (const shared_ptr<view::Signal> sig : _signals) {
assert(sig);
return data;
}
-vector< shared_ptr<view::Signal> > SigSession::get_signals() const
+boost::shared_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;
}
try
{
- lock_guard<mutex> lock(_signals_mutex);
+ lock_guard<boost::shared_mutex> lock(_signals_mutex);
// Create the decoder
decoder_stack = shared_ptr<data::DecoderStack>(
vector< shared_ptr<view::DecodeTrace> > SigSession::get_decode_signals() const
{
- lock_guard<mutex> lock(_signals_mutex);
+ shared_lock<shared_mutex> lock(_signals_mutex);
return _decode_traces;
}
// Make the Signals list
{
- lock_guard<mutex> lock(_signals_mutex);
+ unique_lock<shared_mutex> lock(_signals_mutex);
_signals.clear();
shared_ptr<view::Signal> SigSession::signal_from_channel(
shared_ptr<Channel> channel) const
{
- lock_guard<mutex> lock(_signals_mutex);
+ lock_guard<boost::shared_mutex> lock(_signals_mutex);
for (shared_ptr<view::Signal> sig : _signals) {
assert(sig);
if (sig->channel() == channel)