runtime: encapsulate checkpoint progress state
Some checks failed
build / Linux asan (push) Has been cancelled
build / Linux release (push) Has been cancelled
build / FreeBSD build (push) Has been cancelled

This commit is contained in:
server
2026-04-14 07:12:27 +02:00
parent 3272537376
commit cecc822777
5 changed files with 68 additions and 8 deletions

View File

@@ -1,9 +1,32 @@
#include "stdafx.h"
#include <atomic>
namespace
{
std::atomic<int> s_checkpoint_ticks { 0 };
const char* signal_checkpoint_backend_name_impl(ECheckpointBackend backend)
{
switch (backend)
{
case CHECKPOINT_BACKEND_NONE:
return "none";
case CHECKPOINT_BACKEND_VIRTUAL_TIMER:
return "virtual-timer";
default:
return "unknown";
}
}
}
#ifdef OS_WINDOWS
void signal_setup() {}
void signal_timer_disable() {}
void signal_timer_enable(int timeout_seconds) {}
void signal_mark_progress() {}
ECheckpointBackend signal_checkpoint_backend() { return CHECKPOINT_BACKEND_NONE; }
const char* signal_checkpoint_backend_name(ECheckpointBackend backend) { return signal_checkpoint_backend_name_impl(backend); }
#else
#define RETSIGTYPE void
@@ -16,13 +39,13 @@ RETSIGTYPE reap(int sig)
RETSIGTYPE checkpointing(int sig)
{
if (!tics.load())
if (!s_checkpoint_ticks.load())
{
sys_err("CHECKPOINT shutdown: tics did not updated.");
abort();
}
else
tics.store(0);
s_checkpoint_ticks.store(0);
}
@@ -81,4 +104,19 @@ void signal_setup(void)
signal(SIGUSR1, usrsig);
}
void signal_mark_progress()
{
s_checkpoint_ticks.fetch_add(1, std::memory_order_relaxed);
}
ECheckpointBackend signal_checkpoint_backend()
{
return CHECKPOINT_BACKEND_VIRTUAL_TIMER;
}
const char* signal_checkpoint_backend_name(ECheckpointBackend backend)
{
return signal_checkpoint_backend_name_impl(backend);
}
#endif