38#ifndef __SIM_DRAIN_HH__
39#define __SIM_DRAIN_HH__
void unregisterDrainable(Drainable *obj)
std::mutex globalLock
Lock protecting the set of drainable objects.
void registerDrainable(Drainable *obj)
static DrainManager & instance()
Get the singleton DrainManager instance.
DrainState _state
Global simulator drain state.
size_t drainableCount() const
Thread-safe helper function to get the number of Drainable objects in a system.
static DrainManager _instance
Singleton instance of the drain manager.
bool allInState(DrainState state) const
Helper function to check if all Drainable objects are in a specific state.
std::atomic_uint _count
Number of objects still draining.
std::vector< Drainable * > _allDrainable
Set of all drainable objects.
DrainManager(DrainManager &)=delete
Interface for objects that might require draining before checkpointing.
DrainState dmDrain()
DrainManager interface to request a drain operation.
void dmDrainResume()
DrainManager interface to request a resume operation.
DrainState _drainState
Current drain state of the object.
DrainManager & _drainManager
Convenience reference to the drain manager.
void preCheckpointRestore()
Run state fixups before a checkpoint restore operation.
virtual void drainResume()
Resume execution after a successful drain.
DrainState state() const
Get the simulators global drain state.
void signalDrainDone()
Notify the DrainManager that a Drainable object has finished draining.
void signalDrainDone() const
Signal that an object is drained.
virtual void notifyFork()
Notify a child process of a fork.
void resume()
Resume normal simulation in a Drained system.
virtual DrainState drain()=0
Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are pa...
DrainState drainState() const
Return the current drain state of an object.
bool isDrained() const
Check if the system is drained.
DrainState
Object drain/handover states.
bool tryDrain()
Try to drain the system.
@ Draining
Draining buffers pending serialization/handover.
@ Running
Running normally.
@ Resuming
Transient state while the simulator is resuming.
@ Drained
Buffers drained, ready for serialization/handover.
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.