Skip to content

Commit 126bf82

Browse files
committed
SubProcess bug fix, updateLookup called too early
1 parent f912613 commit 126bf82

File tree

6 files changed

+30
-7
lines changed

6 files changed

+30
-7
lines changed

FWCore/Framework/interface/EventSetupProvider.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ namespace edm {
9696
std::map<EventSetupRecordKey, std::vector<ComponentDescription const*>>& referencedESProducers,
9797
EventSetupsController& esController);
9898

99+
void updateLookup();
100+
99101
bool doRecordsMatch(EventSetupProvider& precedingESProvider,
100102
EventSetupRecordKey const& eventSetupRecordKey,
101103
std::map<EventSetupRecordKey, bool>& allComponentsMatch,

FWCore/Framework/interface/EventSetupRecordProvider.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "FWCore/Framework/interface/EventSetupRecordImpl.h"
2424
#include "FWCore/Framework/interface/ValidityInterval.h"
2525
#include "FWCore/Utilities/interface/get_underlying_safe.h"
26+
#include "FWCore/Utilities/interface/propagate_const.h"
2627

2728
// system include files
2829
#include <map>
@@ -40,6 +41,7 @@ namespace edm {
4041
struct ComponentDescription;
4142
class DataKey;
4243
class ESProductResolverProvider;
44+
class ESRecordsToProductResolverIndices;
4345
class EventSetupProvider;
4446
class EventSetupRecordImpl;
4547
class ParameterSetIDHolder;
@@ -157,6 +159,8 @@ namespace edm {
157159

158160
IntervalStatus intervalStatus() const { return intervalStatus_; }
159161

162+
void updateLookup(ESRecordsToProductResolverIndices const&);
163+
160164
protected:
161165
void addResolversToRecordHelper(edm::propagate_const<std::shared_ptr<ESProductResolverProvider>>& dpp,
162166
DataToPreferredProviderMap const& mp) {

FWCore/Framework/src/ESProducer.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ namespace edm {
2828
sharedResourceNames_.reset();
2929
}
3030

31-
itemsToGetFromRecords_.reserve(consumesInfos_.size());
32-
recordsUsedDuringGet_.reserve(consumesInfos_.size());
33-
3431
if (itemsToGetFromRecords_.size() == consumesInfos_.size()) {
3532
return;
3633
}
3734

35+
itemsToGetFromRecords_.reserve(consumesInfos_.size());
36+
recordsUsedDuringGet_.reserve(consumesInfos_.size());
37+
3838
for (auto& info : consumesInfos_) {
3939
auto& items = itemsToGetFromRecords_.emplace_back();
4040
items.reserve(info->size());

FWCore/Framework/src/EventSetupProvider.cc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -347,10 +347,6 @@ namespace edm {
347347
}
348348
}
349349

350-
auto indices = recordsToResolverIndices();
351-
for (auto& provider : *dataProviders_) {
352-
provider->updateLookup(indices);
353-
}
354350
dataProviders_.reset();
355351

356352
mustFinishConfiguration_ = false;
@@ -541,6 +537,13 @@ namespace edm {
541537
}
542538
}
543539

540+
void EventSetupProvider::updateLookup() {
541+
auto indices = recordsToResolverIndices();
542+
for (auto& recordProvider : recordProviders_) {
543+
recordProvider->updateLookup(indices);
544+
}
545+
}
546+
544547
bool EventSetupProvider::doRecordsMatch(EventSetupProvider& precedingESProvider,
545548
EventSetupRecordKey const& eventSetupRecordKey,
546549
std::map<EventSetupRecordKey, bool>& allComponentsMatch,

FWCore/Framework/src/EventSetupRecordProvider.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,12 @@ namespace edm {
252252
for_all(providers_, std::bind(&EventSetupRecordProvider::addResolversToRecordHelper, this, _1, iMap));
253253
}
254254

255+
void EventSetupRecordProvider::updateLookup(ESRecordsToProductResolverIndices const& iResolverToIndices) {
256+
for (auto& productResolverProvider : providers_) {
257+
productResolverProvider->updateLookup(iResolverToIndices);
258+
}
259+
}
260+
255261
std::set<EventSetupRecordKey> EventSetupRecordProvider::dependentRecords() const { return dependencies(key()); }
256262

257263
std::set<ComponentDescription> EventSetupRecordProvider::resolverProviderDescriptions() const {

FWCore/Framework/src/EventSetupsController.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,17 @@ namespace edm {
8787
// In the following function, all the other components that contribute
8888
// to the same record and also the records that record depends on are
8989
// also checked. The component sharing is appropriately fixed as necessary.
90+
// (this needs to be done before updateLookup because this can cause new
91+
// ESProducers to be constructed).
9092
checkESProducerSharing();
9193
clearComponents();
9294

95+
// updateLookup needs to be called after checkESProducerSharing because
96+
// that can cause new ESProducers to be constructed
97+
for (auto& eventSetupProvider : providers_) {
98+
eventSetupProvider->updateLookup();
99+
}
100+
93101
initializeEventSetupRecordIOVQueues();
94102
numberOfConcurrentIOVs_.clear();
95103
mustFinishConfiguration_ = false;

0 commit comments

Comments
 (0)