From 1a22a33c0fab2dea184561a3c43a0c96856fb352 Mon Sep 17 00:00:00 2001 From: "J.A. de Jong - ASCEE / Redu-Sone" Date: Sat, 17 Jun 2023 07:03:14 -0700 Subject: [PATCH] Finally: some align_val_t that did not work on Windows! --- cmake/OSSpecific.cmake | 3 +++ src/lasp/CMakeLists.txt | 2 +- src/lasp/device/lasp_daqdata.cpp | 4 ++-- src/lasp/dsp/lasp_threadedindatahandler.cpp | 9 +++++---- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cmake/OSSpecific.cmake b/cmake/OSSpecific.cmake index 4998ab9..8840f09 100644 --- a/cmake/OSSpecific.cmake +++ b/cmake/OSSpecific.cmake @@ -1,8 +1,11 @@ if(WIN32) set(home $ENV{USERPROFILE}) # set(miniconda_dir ${home}\\Miniconda3) + set(TARGET_OS_LINKLIBS winmm dsound setupapi ole32 uuid winmm) + message("Building for Windows") else() # Linux compile message("Building for Linux :)") + set(TARGET_OS_LINKLIBS "") endif() diff --git a/src/lasp/CMakeLists.txt b/src/lasp/CMakeLists.txt index b052cdc..4ffef55 100644 --- a/src/lasp/CMakeLists.txt +++ b/src/lasp/CMakeLists.txt @@ -35,6 +35,6 @@ pybind11_add_module(lasp_cpp MODULE lasp_cpp.cpp ) target_link_libraries(lasp_cpp PRIVATE lasp_device_lib lasp_dsp_lib - ${OpenMP_CXX_LIBRARIES} ${LASP_FFT_LIBS}) + ${OpenMP_CXX_LIBRARIES} ${LASP_FFT_LIBS} ${TARGET_OS_LINKLIBS}) install(TARGETS lasp_cpp DESTINATION .) diff --git a/src/lasp/device/lasp_daqdata.cpp b/src/lasp/device/lasp_daqdata.cpp index f191ef0..6be3343 100644 --- a/src/lasp/device/lasp_daqdata.cpp +++ b/src/lasp/device/lasp_daqdata.cpp @@ -26,7 +26,7 @@ DaqData::DaqData(const us nframes, const us nchannels, DEBUGTRACE_PRINT(sw); assert(sw > 0 && sw <= 8); - _data = new (std::align_val_t{8}) byte_t[sw * nchannels * nframes]; + _data = reinterpret_cast(new double[(sw * nchannels * nframes)/8 + 1]); if (!_data) { throw rte("Could not allocate memory for DaqData!"); } @@ -52,7 +52,7 @@ DaqData::DaqData(DaqData &&o) DaqData::~DaqData() { DEBUGTRACE_ENTER; if (_data) - delete[] _data; + delete[] (reinterpret_cast(_data)); } void DaqData::copyInFromRaw(const std::vector &ptrs) { diff --git a/src/lasp/dsp/lasp_threadedindatahandler.cpp b/src/lasp/dsp/lasp_threadedindatahandler.cpp index 340dc1a..a304fe3 100644 --- a/src/lasp/dsp/lasp_threadedindatahandler.cpp +++ b/src/lasp/dsp/lasp_threadedindatahandler.cpp @@ -18,7 +18,7 @@ using std::placeholders::_1; class SafeQueue { std::queue _queue; std::mutex _mtx; - std::atomic_int32_t _contents{0}; + std::atomic _contents{0}; public: void push(const DaqData &d) { @@ -26,19 +26,20 @@ public: lck lock(_mtx); _queue.push(d); _contents++; + assert(_contents == _queue.size()); } DaqData pop() { DEBUGTRACE_ENTER; if (empty()) { throw rte("BUG: Pop on empty queue"); - } + } lck lock(_mtx); /* DaqData d(std::move(_queue.front())); */ DaqData d(_queue.front()); _queue.pop(); _contents--; - + assert(_contents == _queue.size()); return d; } /** @@ -81,7 +82,6 @@ void ThreadedInDataHandlerBase::_inCallbackFromInDataHandler( _queue->push(daqdata); if (!_thread_running) { DEBUGTRACE_PRINT("Pushing new thread in pool"); - _thread_running = true; _pool.push_task(&ThreadedInDataHandlerBase::threadFcn, this); } } @@ -115,6 +115,7 @@ ThreadedInDataHandlerBase::~ThreadedInDataHandlerBase() { void ThreadedInDataHandlerBase::threadFcn() { DEBUGTRACE_ENTER; + _thread_running = true; while (!_queue->empty() && _thread_can_safely_run) {