Skip to content

Commit cda48ac

Browse files
committed
test commit
1 parent 76935e7 commit cda48ac

File tree

7 files changed

+111
-95
lines changed

7 files changed

+111
-95
lines changed

src/viam/sdk/CMakeLists.txt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ target_sources(viamsdk
126126
module/handler_map.cpp
127127
module/module.cpp
128128
module/service.cpp
129-
module/signal_manager.cpp
130129
referenceframe/frame.cpp
131130
registry/registry.cpp
132131
resource/reconfigurable.cpp
@@ -221,6 +220,18 @@ target_sources(viamsdk
221220
${CMAKE_CURRENT_BINARY_DIR}/../../viam/sdk/common/grpc_fwd.hpp
222221
)
223222

223+
if(WIN32)
224+
target_sources(viamsdk
225+
PRIVATE
226+
module/signal_manager_windows.cpp
227+
)
228+
else()
229+
target_sources(viamsdk
230+
PRIVATE
231+
module/signal_manager_posix.cpp
232+
)
233+
endif()
234+
224235
set_target_properties(
225236
viamsdk PROPERTIES
226237
SOVERSION noabi

src/viam/sdk/module/signal_manager.cpp

Lines changed: 0 additions & 79 deletions
This file was deleted.

src/viam/sdk/module/signal_manager.hpp

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
#pragma once
22

3-
#include <signal.h>
4-
5-
#ifdef _WIN32
6-
#include <windows.h>
7-
#endif
3+
#include <memory> //must include for std::unique_ptr
84

95
namespace viam {
106
namespace sdk {
@@ -27,16 +23,8 @@ class SignalManager {
2723
int wait();
2824

2925
private:
30-
#ifdef _WIN32
31-
static BOOL WINAPI console_handler_routine_(DWORD dwCtrlType);
32-
void handle_signal_(int signal);
33-
34-
static SignalManager* instance_;
35-
HANDLE signal_event_ = INVALID_HANDLE_VALUE;
36-
int signal_code_ = 0;
37-
#else
38-
sigset_t sigset_;
39-
#endif
26+
struct Impl; // Forward declaration for pImpl idiom
27+
std::unique_ptr<Impl> pImpl; // Pointer to the implementation
4028
};
4129

4230
} // namespace sdk
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include <viam/sdk/module/signal_manager.hpp>
2+
3+
#include <signal.h>
4+
#include <csignal>
5+
#include <pthread.h>
6+
7+
namespace viam {
8+
namespace sdk {
9+
10+
struct SignalManager::Impl {
11+
sigset_t sigset_;
12+
};
13+
14+
SignalManager::SignalManager()
15+
:pImpl(std::make_unique<Impl>()) {
16+
sigemptyset(&(pImpl->sigset_));
17+
sigaddset(&(pImpl->sigset_), SIGINT);
18+
sigaddset(&(pImpl->sigset_), SIGTERM);
19+
pthread_sigmask(SIG_BLOCK, &(pImpl->sigset_), NULL);
20+
}
21+
22+
SignalManager::~SignalManager() {}
23+
24+
int SignalManager::wait() {
25+
int sig = 0;
26+
return sigwait(&((pImpl->sigset_)), &sig);
27+
}
28+
29+
} // namespace sdk
30+
} // namespace viam
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#include <viam/sdk/module/signal_manager.hpp>
2+
#include <signal.h>
3+
#include <windows.h> //this file assumes WIN32
4+
5+
#include <stdexcept>
6+
7+
namespace viam {
8+
namespace sdk {
9+
10+
struct SignalManager::Impl { //Windows implementation details of SignalManager
11+
static BOOL WINAPI console_handler_routine_(DWORD dwCtrlType){
12+
if (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_BREAK_EVENT) {
13+
instance_->handle_signal_(SIGINT);
14+
return TRUE;
15+
} else if (dwCtrlType == CTRL_CLOSE_EVENT || dwCtrlType == CTRL_LOGOFF_EVENT ||
16+
dwCtrlType == CTRL_SHUTDOWN_EVENT) {
17+
instance_->handle_signal_(SIGTERM);
18+
return TRUE;
19+
}
20+
return FALSE;
21+
}
22+
23+
void handle_signal_(int signal){
24+
if (signal_event_ != INVALID_HANDLE_VALUE) {
25+
signal_code_ = signal;
26+
SetEvent(signal_event_);
27+
}
28+
}
29+
30+
static SignalManager::Impl* instance_;
31+
HANDLE signal_event_ = INVALID_HANDLE_VALUE;
32+
int signal_code_ = 0;
33+
};
34+
35+
SignalManager::Impl* SignalManager::Impl::instance_ = nullptr;
36+
37+
SignalManager::SignalManager()
38+
:pImpl(std::make_unique<Impl>()) {
39+
SignalManager::Impl::instance_ = this->pImpl;
40+
SetConsoleCtrlHandler(SignalManager::Impl::console_handler_routine_, TRUE);
41+
}
42+
43+
SignalManager::~SignalManager() {
44+
SetConsoleCtrlHandler(NULL, FALSE);
45+
if (pImpl->signal_event_ != INVALID_HANDLE_VALUE) {
46+
CloseHandle(pImpl->signal_event_);
47+
}
48+
SignalManager::Impl::instance_ = nullptr;
49+
}
50+
51+
int SignalManager::wait() {
52+
pImpl->signal_event_ = CreateEvent(NULL, TRUE, FALSE, NULL);
53+
if (pImpl->signal_event_ == INVALID_HANDLE_VALUE) {
54+
throw std::runtime_error("Failed to create signal event");
55+
}
56+
WaitForSingleObject(pImpl->signal_event_, INFINITE);
57+
return static_cast<DWORD>(pImpl->signal_code_);
58+
}
59+
60+
61+
} // namespace sdk
62+
} // namespace viam
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
---
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Start testing: Jun 03 10:10 EDT
2+
----------------------------------------------------------
3+
End testing: Jun 03 10:10 EDT

0 commit comments

Comments
 (0)