ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
G4Utilities
G4RunManagement
src
G4RunToolStateSynchronization.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
G4RunToolStateSynchronization.h
"
6
7
#include <utility>
8
9
void
G4RunToolStateSynchronization::NotifyBeginRun
()
10
{
11
{
12
std::scoped_lock lk(
m_mutex
);
13
if
(
m_status
==
Status::Starting
) {
14
m_status
=
Status::Running
;
15
}
16
}
17
m_cv
.notify_all();
18
}
19
20
void
G4RunToolStateSynchronization::RequestFinalize
()
21
{
22
{
23
std::scoped_lock lk(
m_mutex
);
24
if
(
m_status
==
Status::Starting
||
m_status
==
Status::Running
) {
25
m_status
=
Status::FinalizeRequested
;
26
}
27
}
28
m_cv
.notify_all();
29
}
30
31
void
G4RunToolStateSynchronization::Fail
(std::string message)
32
{
33
{
34
std::scoped_lock lk(
m_mutex
);
35
// Preserve the first terminal outcome and its diagnostic message.
36
if
(
m_status
!=
Status::Failed
&&
m_status
!=
Status::Stopped
) {
37
m_failureMessage
= std::move(message);
38
m_status
=
Status::Failed
;
39
}
40
}
41
m_cv
.notify_all();
42
}
43
44
void
G4RunToolStateSynchronization::NotifyThreadExit
()
45
{
46
{
47
std::scoped_lock lk(
m_mutex
);
48
if
(
m_status
==
Status::Starting
||
m_status
==
Status::Running
) {
49
if
(
m_failureMessage
.empty()) {
50
m_failureMessage
=
51
"Geant4 main thread exited without completing its lifecycle"
;
52
}
53
m_status
=
Status::Failed
;
54
}
55
else
if
(
m_status
==
Status::FinalizeRequested
) {
56
m_status
=
Status::Stopped
;
57
}
58
}
59
m_cv
.notify_all();
60
}
61
62
bool
G4RunToolStateSynchronization::WaitBeginRun
(
63
std::string& failureMessage)
64
{
65
std::unique_lock lk(
m_mutex
);
66
m_cv
.wait(lk, [
this
]{
return
m_status
!=
Status::Starting
; });
67
if
(
m_status
==
Status::Running
) {
68
return
true
;
69
}
70
71
failureMessage =
m_failureMessage
;
72
if
(failureMessage.empty()) {
73
failureMessage =
"Geant4 stopped before beginning a run"
;
74
}
75
return
false
;
76
}
77
78
bool
G4RunToolStateSynchronization::StopRequested
()
const
79
{
80
std::scoped_lock lk(
m_mutex
);
81
return
m_status
==
Status::FinalizeRequested
||
82
m_status
==
Status::Failed
||
83
m_status
==
Status::Stopped
;
84
}
G4RunToolStateSynchronization.h
G4RunToolStateSynchronization::NotifyBeginRun
void NotifyBeginRun()
Transition Starting to Running. Ignored in every other state.
Definition
G4RunToolStateSynchronization.cxx:9
G4RunToolStateSynchronization::WaitBeginRun
bool WaitBeginRun(std::string &failureMessage)
Wait until startup succeeds or the lifecycle reaches a terminal condition.
Definition
G4RunToolStateSynchronization.cxx:62
G4RunToolStateSynchronization::StopRequested
bool StopRequested() const
Return whether the Geant4 run loop must stop.
Definition
G4RunToolStateSynchronization.cxx:78
G4RunToolStateSynchronization::NotifyThreadExit
void NotifyThreadExit()
Record normal exit after finalization, or failure after an unexpected exit.
Definition
G4RunToolStateSynchronization.cxx:44
G4RunToolStateSynchronization::m_failureMessage
std::string m_failureMessage
Definition
G4RunToolStateSynchronization.h:50
G4RunToolStateSynchronization::Status::FinalizeRequested
@ FinalizeRequested
Athena requested termination of the Geant4 run loop.
Definition
G4RunToolStateSynchronization.h:30
G4RunToolStateSynchronization::Status::Running
@ Running
BeginOfRun was observed; Athena may submit events.
Definition
G4RunToolStateSynchronization.h:29
G4RunToolStateSynchronization::Status::Stopped
@ Stopped
The Geant4 main thread exited normally; terminal state.
Definition
G4RunToolStateSynchronization.h:32
G4RunToolStateSynchronization::Status::Starting
@ Starting
Waiting for the first Geant4 BeginOfRun notification.
Definition
G4RunToolStateSynchronization.h:28
G4RunToolStateSynchronization::Status::Failed
@ Failed
The Geant4 main thread failed; terminal state.
Definition
G4RunToolStateSynchronization.h:31
G4RunToolStateSynchronization::m_mutex
std::mutex m_mutex
Definition
G4RunToolStateSynchronization.h:51
G4RunToolStateSynchronization::m_status
Status m_status
Definition
G4RunToolStateSynchronization.h:49
G4RunToolStateSynchronization::Fail
void Fail(std::string message)
Transition any non-terminal state to Failed and wake startup waiters.
Definition
G4RunToolStateSynchronization.cxx:31
G4RunToolStateSynchronization::RequestFinalize
void RequestFinalize()
Transition Starting or Running to FinalizeRequested.
Definition
G4RunToolStateSynchronization.cxx:20
G4RunToolStateSynchronization::m_cv
std::condition_variable m_cv
Definition
G4RunToolStateSynchronization.h:52
Generated on
for ATLAS Offline Software by
1.17.0