]> sigrok.org Git - pulseview.git/blobdiff - pv/data/analogsnapshot.cpp
Analog buffer sharing crash by memcpying for the AnanlogSignal::paint
[pulseview.git] / pv / data / analogsnapshot.cpp
index 2bcb99f3e978c47903d22d58b8a54482eb227b4a..1658a04c3bfe365138b5ba21f064702e3719e0f7 100644 (file)
@@ -49,9 +49,21 @@ void AnalogSnapshot::append_payload(
        append_data(analog.data, analog.num_samples);
 }
 
        append_data(analog.data, analog.num_samples);
 }
 
-const float* AnalogSnapshot::get_samples() const
+const float* AnalogSnapshot::get_samples(
+       int64_t start_sample, int64_t end_sample) const
 {
 {
-       return (const float*)_data;
+       assert(start_sample >= 0);
+       assert(start_sample < (int64_t)_sample_count);
+       assert(end_sample >= 0);
+       assert(end_sample < (int64_t)_sample_count);
+       assert(start_sample <= end_sample);
+
+       lock_guard<recursive_mutex> lock(_mutex);
+
+       float *const data = new float[end_sample - start_sample];
+       memcpy(data, (float*)_data + start_sample, sizeof(float) *
+               (end_sample - start_sample));
+       return data;
 }
 
 } // namespace data
 }
 
 } // namespace data