Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/feature/clean_stop'
Browse files Browse the repository at this point in the history
  • Loading branch information
StefanoLusardi committed Jan 23, 2021
2 parents 4d40207 + 8911b2a commit e1c319f
Show file tree
Hide file tree
Showing 11 changed files with 171 additions and 51 deletions.
8 changes: 7 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,13 @@ option(SSTS_INSTALL_EXAMPLES "Install examples (requires installing library and
option(SSTS_ENABLE_SANITIZERS "" OFF)

if(${SSTS_ENABLE_SANITIZERS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fno-omit-frame-pointer -fsanitize=thread")
if(NOT WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
message(STATUS "::ssTs:: Thread Sanitizer enabled")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fno-omit-frame-pointer -fsanitize=thread")
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=thread")
else()
message("Thread Sanitizer is not supported on the current platform")
endif()
endif()

if(${SSTS_ENABLE_CODE_COVERAGE})
Expand Down
57 changes: 36 additions & 21 deletions ci/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@ trigger:
- feature/*

parameters:
- name: SSTS_COVERAGE_STAGE
type: boolean
default: False
- name: SSTS_DOCS_STAGE
type: boolean
default: False
- name: SSTS_TESTS_STAGE
type: boolean
default: True
- name: SSTS_BUILD_TYPE
type: string
default: Release
Expand Down Expand Up @@ -35,6 +44,9 @@ parameters:
- OFF

variables:
COVERAGE_STAGE: ${{ parameters.SSTS_COVERAGE_STAGE }}
DOCS_STAGE: ${{ parameters.SSTS_DOCS_STAGE }}
TESTS_STAGE: ${{ parameters.SSTS_TESTS_STAGE }}
BUILD_TYPE: ${{ parameters.SSTS_BUILD_TYPE }}
INSTALL_LIBRARY: ${{ parameters.SSTS_INSTALL_LIBRARY }}
BUILD_TESTS: ${{ parameters.SSTS_BUILD_TESTS }}
Expand Down Expand Up @@ -65,6 +77,7 @@ stages:

- stage: Coverage
displayName: 'Coverage'
condition: eq(variables['COVERAGE_STAGE'], 'True')
dependsOn: []
jobs:

Expand All @@ -90,7 +103,7 @@ stages:
inputs:
targetType: 'inline'
script: |
sudo apt install gcovr
sudo apt-get update --fix-missing && sudo apt install gcovr
echo 'gcovr Version: '
gcovr --version
- task: Bash@3
Expand Down Expand Up @@ -181,6 +194,7 @@ stages:

- stage: Docs
displayName: 'Docs'
condition: eq(variables['DOCS_STAGE'], 'True')
dependsOn: []
jobs:

Expand Down Expand Up @@ -240,6 +254,7 @@ stages:

- stage: Build
displayName: 'Build'
condition: eq(variables['TESTS_STAGE'], 'True')
dependsOn: []
jobs:

Expand Down Expand Up @@ -290,7 +305,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -349,7 +364,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -408,7 +423,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -472,7 +487,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -531,7 +546,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -590,7 +605,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -655,7 +670,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -714,7 +729,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -773,7 +788,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -838,7 +853,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -897,7 +912,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV'
script: 'ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j'
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1007,7 +1022,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1085,7 +1100,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1158,7 +1173,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1216,7 +1231,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1268,7 +1283,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1329,7 +1344,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1385,7 +1400,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1441,7 +1456,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down Expand Up @@ -1497,7 +1512,7 @@ stages:
displayName: 'CMake - Run CTest'
continueOnError: true
inputs:
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV
script: ctest . --build-config $(BUILD_TYPE) --output-on-failure --timeout 60 -T Test -VV -j
workingDirectory: $(BUILD_DIRECTORY)
- task: PublishTestResults@2
displayName: 'Publish test results'
Expand Down
2 changes: 1 addition & 1 deletion examples/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

project(ssts_examples LANGUAGES CXX)
set(PROJECT_NAME ssts_examples)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
Expand Down
24 changes: 18 additions & 6 deletions include/ssts/task_pool.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,19 @@ class task_pool
: _is_running{ true }
{
const auto thread_count = std::clamp(num_threads, 1u, std::thread::hardware_concurrency());
for (unsigned int i = 0; i < thread_count; ++i)
_threads.emplace_back([this] { worker_thread(); });
_threads.reserve(thread_count);
try
{
for (unsigned int i = 0; i < thread_count; ++i)
_threads.emplace_back(&task_pool::worker_thread, this);
// _threads.emplace_back([this] { worker_thread(); });
}
catch (...)
{
_is_running = false;
_task_cv.notify_all();
throw;
}
}

task_pool(task_pool&) = delete;
Expand All @@ -54,8 +65,8 @@ class task_pool
*/
~task_pool()
{
if (_is_running)
stop();
// if (_is_running)
stop();
}

/*!
Expand All @@ -67,6 +78,7 @@ class task_pool
{
_is_running = false;
_task_cv.notify_all();

for (auto&& t : _threads)
{
if (t.joinable())
Expand Down Expand Up @@ -109,13 +121,13 @@ class task_pool

void worker_thread()
{
while (true)
while (_is_running)
{
std::unique_lock lock(_task_mtx);
_task_cv.wait(lock, [this] { return !_task_queue.empty() || !_is_running; });

if (!_is_running)
break;
return;

auto task = std::move(_task_queue.front());
_task_queue.pop();
Expand Down

0 comments on commit e1c319f

Please sign in to comment.