Session: Converted data_mutex_ into a std::recursive_mutex
[pulseview.git] / pv / session.cpp
index 542b88b798188696eabc216947065bf5f43c06ce..e187a4d35245aecefe25b344433346595664c1f4 100644 (file)
@@ -60,6 +60,7 @@ using std::lock_guard;
 using std::list;
 using std::map;
 using std::mutex;
+using std::recursive_mutex;
 using std::set;
 using std::shared_ptr;
 using std::string;
@@ -133,7 +134,7 @@ void Session::set_device(shared_ptr<devices::Device> device)
                (shared_ptr<sigrok::Device> device, shared_ptr<Packet> packet) {
                        data_feed_in(device, packet);
                });
-       update_signals(device_);
+       update_signals();
 
        decode_traces_.clear();
 
@@ -301,12 +302,12 @@ void Session::set_capture_state(capture_state state)
                capture_state_changed(state);
 }
 
-void Session::update_signals(shared_ptr<devices::Device> device)
+void Session::update_signals()
 {
-       assert(device);
+       assert(device_);
        assert(capture_state_ == Stopped);
 
-       const shared_ptr<sigrok::Device> sr_dev = device->device();
+       const shared_ptr<sigrok::Device> sr_dev = device_->device();
        if (!sr_dev) {
                signals_.clear();
                logic_data_.reset();
@@ -322,7 +323,7 @@ void Session::update_signals(shared_ptr<devices::Device> device)
 
        // Create data containers for the logic data segments
        {
-               lock_guard<mutex> data_lock(data_mutex_);
+               lock_guard<recursive_mutex> data_lock(data_mutex_);
 
                if (logic_channel_count == 0) {
                        logic_data_.reset();
@@ -364,7 +365,7 @@ void Session::update_signals(shared_ptr<devices::Device> device)
                                case SR_CHANNEL_LOGIC:
                                        signal = shared_ptr<view::Signal>(
                                                new view::LogicSignal(*this,
-                                                       device, channel,
+                                                       device_, channel,
                                                        logic_data_));
                                        break;
 
@@ -480,7 +481,7 @@ void Session::feed_in_frame_begin()
 
 void Session::feed_in_logic(shared_ptr<Logic> logic)
 {
-       lock_guard<mutex> lock(data_mutex_);
+       lock_guard<recursive_mutex> lock(data_mutex_);
 
        if (!logic_data_)
        {
@@ -530,7 +531,7 @@ void Session::feed_in_logic(shared_ptr<Logic> logic)
 
 void Session::feed_in_analog(shared_ptr<Analog> analog)
 {
-       lock_guard<mutex> lock(data_mutex_);
+       lock_guard<recursive_mutex> lock(data_mutex_);
 
        const vector<shared_ptr<Channel>> channels = analog->channels();
        const unsigned int channel_count = channels.size();
@@ -634,7 +635,7 @@ void Session::data_feed_in(shared_ptr<sigrok::Device> device,
        case SR_DF_END:
        {
                {
-                       lock_guard<mutex> lock(data_mutex_);
+                       lock_guard<recursive_mutex> lock(data_mutex_);
                        cur_logic_segment_.reset();
                        cur_analog_segments_.clear();
                }