00001 #pragma once 00002 00003 #include "../external/Signals/Signal.h" 00004 #include "timer.h" 00005 // #include "dmtcpaware.h" 00006 00012 class MtcpCheckpointManager 00013 { 00014 public: 00015 00017 inline void checkpointingTimeFrame(); 00018 00020 inline void connectTimer(Timer & tim); 00021 00023 inline void disconnectTimer(Timer & tim); 00024 00025 00026 protected: 00029 Gallant::Signal0<void> pauseTimerSig; 00030 Gallant::Signal0<void> continueTimerSig; 00034 inline void pauseTimers() ; 00035 00036 inline void continueTimers() ; 00037 00038 inline void mtcp_managed_ok(); 00039 00040 inline void mtcp_managed_no(); 00041 00042 }; 00043 00044 00045 inline void MtcpCheckpointManager::checkpointingTimeFrame() 00046 { 00047 mtcp_managed_ok(); 00048 mtcp_managed_no(); 00049 } 00050 00051 inline void MtcpCheckpointManager::connectTimer(Timer & tim) 00052 { 00053 pauseTimerSig.Connect(&tim, & Timer::pauseTimer ); 00054 continueTimerSig.Connect(&tim, & Timer::continueTimer ); 00055 00056 } 00057 00058 inline void MtcpCheckpointManager::disconnectTimer(Timer & tim) 00059 { 00060 pauseTimerSig.Disconnect(&tim, & Timer::pauseTimer ); 00061 continueTimerSig.Disconnect(&tim, & Timer::continueTimer ); 00062 } 00063 00064 00066 inline void MtcpCheckpointManager::pauseTimers() 00067 { 00068 pauseTimerSig(); 00069 }; 00070 00072 inline void MtcpCheckpointManager::continueTimers() 00073 { 00074 continueTimerSig(); 00075 }; 00076 00078 inline void MtcpCheckpointManager::mtcp_managed_ok() 00079 { 00080 pauseTimers(); 00081 //dmtcpDelayCheckpointsUnlock( ) 00082 #ifdef MTCP 00083 mtcp_ok(); 00084 #endif 00085 } 00086 00087 00089 inline void MtcpCheckpointManager::mtcp_managed_no() 00090 { 00091 #ifdef MTCP 00092 mtcp_no(); 00093 #endif 00094 //dmtcpDelayCheckpointsLock ( ) 00095 continueTimers(); 00096 }