This initializes the scheduler and other components that need to be set up after forking. In athenaEF (without PSC), this should be called after prepareForRun() and before running the event loop.
212 {
213
214 if (worker_pid < 0) {
215 worker_pid = getpid();
216 }
217
218
219 ISvcLocator* svcLoc = Gaudi::svcLocator();
220 if (!svcLoc) {
221 std::cerr << "TrigServicesHelper: Failed to get ISvcLocator" << std::endl;
222 return false;
223 }
224
225
226
227 auto jobOptSvc = svcLoc->service<Gaudi::Interfaces::IOptionsSvc>("JobOptionsSvc");
228 if (!jobOptSvc) {
229 std::cerr << "TrigServicesHelper: Failed to get JobOptionsSvc" << std::endl;
230 return false;
231 }
232
233
234 jobOptSvc->set("DataFlowConfig.DF_WorkerId", std::to_string(worker_id));
235 jobOptSvc->set("DataFlowConfig.DF_Pid", std::to_string(worker_pid));
236 jobOptSvc->set("DataFlowConfig.DF_ApplicationName", "athenaEF");
237
238 std::cout << "TrigServicesHelper: Set DataFlowConfig properties (WorkerId="
239 << worker_id << ", Pid=" << worker_pid << ")" << std::endl;
240
241
242 boost::property_tree::ptree
pt;
243
244
245 auto evtLoopMgr = svcLoc->service<ITrigEventLoopMgr>(event_loop_name);
246 if (!evtLoopMgr) {
247 std::cerr << "TrigServicesHelper: Failed to retrieve ITrigEventLoopMgr '"
248 << event_loop_name << "'" << std::endl;
249 return false;
250 }
251
252
253 std::cout << "TrigServicesHelper: Calling hltUpdateAfterFork on " << event_loop_name << std::endl;
255
256 if (
sc.isFailure()) {
257 std::cerr << "TrigServicesHelper: hltUpdateAfterFork failed" << std::endl;
258 return false;
259 }
260
261 std::cout << "TrigServicesHelper: hltUpdateAfterFork completed successfully" << std::endl;
262 return true;
263 }
::StatusCode StatusCode
StatusCode definition for legacy code.