Skip to content

Commit 1e6587b

Browse files
committed
Properly lock source for Run/Lumi transition
The source lock was not being taken during the doBeginRun/doBeginLumi calls to the source. The caused issues when a Run/Lumi transition coincided with a delayed read call.
1 parent 450f248 commit 1e6587b

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

FWCore/Framework/src/EventProcessor.cc

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,13 +1203,16 @@ namespace edm {
12031203
return;
12041204
}
12051205

1206-
status->setRunPrincipal(readRun());
1207-
1208-
RunPrincipal& runPrincipal = *status->runPrincipal();
12091206
{
1210-
SendSourceTerminationSignalIfException sentry(actReg_.get());
1211-
input_->doBeginRun(runPrincipal, &processContext_);
1212-
sentry.completedSuccessfully();
1207+
std::lock_guard<std::recursive_mutex> guard(*(sourceMutex_.get()));
1208+
status->setRunPrincipal(readRun());
1209+
1210+
RunPrincipal& runPrincipal = *status->runPrincipal();
1211+
{
1212+
SendSourceTerminationSignalIfException sentry(actReg_.get());
1213+
input_->doBeginRun(runPrincipal, &processContext_);
1214+
sentry.completedSuccessfully();
1215+
}
12131216
}
12141217

12151218
EventSetupImpl const& es = status->eventSetupImpl(esp_->subProcessIndex());
@@ -1638,15 +1641,18 @@ namespace edm {
16381641
return;
16391642
}
16401643

1641-
status->setLumiPrincipal(readLuminosityBlock(iRunStatus->runPrincipal()));
1642-
1643-
LuminosityBlockPrincipal& lumiPrincipal = *status->lumiPrincipal();
16441644
{
1645-
SendSourceTerminationSignalIfException sentry(actReg_.get());
1646-
input_->doBeginLumi(lumiPrincipal, &processContext_);
1647-
sentry.completedSuccessfully();
1645+
std::lock_guard<std::recursive_mutex> guard(*(sourceMutex_.get()));
1646+
status->setLumiPrincipal(readLuminosityBlock(iRunStatus->runPrincipal()));
1647+
1648+
LuminosityBlockPrincipal& lumiPrincipal = *status->lumiPrincipal();
1649+
{
1650+
SendSourceTerminationSignalIfException sentry(actReg_.get());
1651+
input_->doBeginLumi(lumiPrincipal, &processContext_);
1652+
sentry.completedSuccessfully();
1653+
}
16481654
}
1649-
1655+
LuminosityBlockPrincipal& lumiPrincipal = *status->lumiPrincipal();
16501656
Service<RandomNumberGenerator> rng;
16511657
if (rng.isAvailable()) {
16521658
LuminosityBlock lb(lumiPrincipal, ModuleDescription(), nullptr, false);

0 commit comments

Comments
 (0)