From bac5aba6e89841403fa5cbbf33ce9f6be763c228 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Mon, 12 Aug 2013 17:05:15 -0500 Subject: [PATCH] Fixed bug in the unit tests A bug was introduced into these unit tests where a reference to a stack variable was added to a lambda but that lambda was not used from within the scope of the declaring function. This problem was only seen when the tests were compiled non-optimized. --- .../Framework/test/global_module_t.cppunit.cc | 35 ++++++++++++------- .../test/one_outputmodule_t.cppunit.cc | 16 +++++---- .../Framework/test/stream_module_t.cppunit.cc | 35 ++++++++++++------- 3 files changed, 54 insertions(+), 32 deletions(-) diff --git a/FWCore/Framework/test/global_module_t.cppunit.cc b/FWCore/Framework/test/global_module_t.cppunit.cc index b7a8bfbe37d7a..1f3dc9c6e7de3 100644 --- a/FWCore/Framework/test/global_module_t.cppunit.cc +++ b/FWCore/Framework/test/global_module_t.cppunit.cc @@ -342,47 +342,56 @@ m_ep() m_ep->fillEventPrincipal(eventAux); m_ep->setLuminosityBlockPrincipal(m_lbp); - edm::StreamContext streamContext(edm::StreamID::invalidStreamID(), nullptr); //For each transition, bind a lambda which will call the proper method of the Worker - m_transToFunc[Trans::kBeginStream] = [this, &streamContext](edm::Worker* iBase) { + m_transToFunc[Trans::kBeginStream] = [this](edm::Worker* iBase) { + edm::StreamContext streamContext(edm::StreamID::invalidStreamID(), nullptr); iBase->beginStream(edm::StreamID::invalidStreamID(), streamContext); }; - edm::ParentContext nullParentContext; - m_transToFunc[Trans::kGlobalBeginRun] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kStreamBeginRun] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kStreamBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kEvent] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_ep,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kStreamEndRun] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kStreamEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kGlobalEndRun] = [this,&nullParentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext nullParentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), nullParentContext, nullptr); }; - m_transToFunc[Trans::kEndStream] = [this, &streamContext](edm::Worker* iBase) { + m_transToFunc[Trans::kEndStream] = [this](edm::Worker* iBase) { + edm::StreamContext streamContext(edm::StreamID::invalidStreamID(), nullptr); iBase->endStream(edm::StreamID::invalidStreamID(), streamContext); }; } diff --git a/FWCore/Framework/test/one_outputmodule_t.cppunit.cc b/FWCore/Framework/test/one_outputmodule_t.cppunit.cc index 9c16db14894ca..ee49ad01174d2 100644 --- a/FWCore/Framework/test/one_outputmodule_t.cppunit.cc +++ b/FWCore/Framework/test/one_outputmodule_t.cppunit.cc @@ -238,30 +238,34 @@ m_ep() iBase->respondToOpenInputFile(fb); }; - edm::ParentContext parentContext; - m_transToFunc[Trans::kGlobalBeginRun] = [this, &parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), parentContext, nullptr); }; - m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this, &parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), parentContext, nullptr); }; - m_transToFunc[Trans::kEvent] = [this, &parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_ep,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), parentContext, nullptr); }; - m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this, &parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), parentContext, nullptr); auto b =iBase->createOutputModuleCommunicator(); CPPUNIT_ASSERT(b.get()); b->writeLumi(*m_lbp, nullptr); }; - m_transToFunc[Trans::kGlobalEndRun] = [this, &parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, edm::StreamID::invalidStreamID(), parentContext, nullptr); auto b = iBase->createOutputModuleCommunicator(); CPPUNIT_ASSERT(b.get()); diff --git a/FWCore/Framework/test/stream_module_t.cppunit.cc b/FWCore/Framework/test/stream_module_t.cppunit.cc index 438e8e4971c12..02042bf92a86a 100644 --- a/FWCore/Framework/test/stream_module_t.cppunit.cc +++ b/FWCore/Framework/test/stream_module_t.cppunit.cc @@ -392,46 +392,55 @@ m_ep() m_ep->fillEventPrincipal(eventAux); m_ep->setLuminosityBlockPrincipal(m_lbp); - edm::ParentContext parentContext; - edm::StreamContext streamContext(s_streamID0, nullptr); //For each transition, bind a lambda which will call the proper method of the Worker - m_transToFunc[Trans::kBeginStream] = [this, &streamContext](edm::Worker* iBase) { + m_transToFunc[Trans::kBeginStream] = [this](edm::Worker* iBase) { + edm::StreamContext streamContext(s_streamID0, nullptr); iBase->beginStream(s_streamID0, streamContext); }; - m_transToFunc[Trans::kGlobalBeginRun] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kStreamBeginRun] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kStreamBeginRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kStreamBeginLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kEvent] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kEvent] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_ep,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kStreamEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalEndLuminosityBlock] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_lbp,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kStreamEndRun] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kStreamEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kGlobalEndRun] = [this,&parentContext](edm::Worker* iBase) { + m_transToFunc[Trans::kGlobalEndRun] = [this](edm::Worker* iBase) { typedef edm::OccurrenceTraits Traits; + edm::ParentContext parentContext; iBase->doWork(*m_rp,*m_es,m_context,m_timer, s_streamID0, parentContext, nullptr); }; - m_transToFunc[Trans::kEndStream] = [this, &streamContext](edm::Worker* iBase) { + m_transToFunc[Trans::kEndStream] = [this](edm::Worker* iBase) { + edm::StreamContext streamContext(s_streamID0, nullptr); iBase->endStream(s_streamID0, streamContext); }; }