@@ -526,7 +526,7 @@ struct ControlWebSocketHandler : public WebSocketHandler {
526526 }
527527 size_t timestamp = uv_now (mContext .loop );
528528 for (auto & callback : *mContext .metricProcessingCallbacks ) {
529- callback (* mContext .registry , *mContext .metrics , *mContext .specs , *mContext .infos , mContext .driver ->metrics , timestamp);
529+ callback (mContext .registry , *mContext .metrics , *mContext .specs , *mContext .infos , mContext .driver ->metrics , timestamp);
530530 }
531531 for (auto & metricsInfo : *mContext .metrics ) {
532532 std::fill (metricsInfo.changed .begin (), metricsInfo.changed .end (), false );
@@ -1112,29 +1112,29 @@ int doChild(int argc, char** argv, ServiceRegistry& serviceRegistry,
11121112 &processingPolicies,
11131113 &deviceContext,
11141114 &loop](fair::mq::DeviceRunner& r) {
1115+ ServiceRegistryRef serviceRef = {serviceRegistry};
11151116 simpleRawDeviceService = std::make_unique<SimpleRawDeviceService>(nullptr , spec);
1116- serviceRegistry .registerService (ServiceRegistryHelpers::handleForService<RawDeviceService>(simpleRawDeviceService.get ()));
1117+ serviceRef .registerService (ServiceRegistryHelpers::handleForService<RawDeviceService>(simpleRawDeviceService.get ()));
11171118
11181119 deviceState = std::make_unique<DeviceState>();
11191120 deviceState->loop = loop;
11201121 deviceState->tracingFlags = DeviceStateHelpers::parseTracingFlags (r.fConfig .GetPropertyAsString (" dpl-tracing-flags" ));
1121- serviceRegistry .registerService (ServiceRegistryHelpers::handleForService<DeviceState>(deviceState.get ()));
1122+ serviceRef .registerService (ServiceRegistryHelpers::handleForService<DeviceState>(deviceState.get ()));
11221123
11231124 quotaEvaluator = std::make_unique<ComputingQuotaEvaluator>(uv_now (loop));
1124- serviceRegistry .registerService (ServiceRegistryHelpers::handleForService<ComputingQuotaEvaluator>(quotaEvaluator.get ()));
1125+ serviceRef .registerService (ServiceRegistryHelpers::handleForService<ComputingQuotaEvaluator>(quotaEvaluator.get ()));
11251126
11261127 deviceContext = std::make_unique<DeviceContext>();
1127- serviceRegistry .registerService (ServiceRegistryHelpers::handleForService<DeviceSpec const >(&spec));
1128- serviceRegistry .registerService (ServiceRegistryHelpers::handleForService<RunningWorkflowInfo const >(&runningWorkflow));
1129- serviceRegistry .registerService (ServiceRegistryHelpers::handleForService<DeviceContext>(deviceContext.get ()));
1128+ serviceRef .registerService (ServiceRegistryHelpers::handleForService<DeviceSpec const >(&spec));
1129+ serviceRef .registerService (ServiceRegistryHelpers::handleForService<RunningWorkflowInfo const >(&runningWorkflow));
1130+ serviceRef .registerService (ServiceRegistryHelpers::handleForService<DeviceContext>(deviceContext.get ()));
11301131
11311132 // The decltype stuff is to be able to compile with both new and old
11321133 // FairMQ API (one which uses a shared_ptr, the other one a unique_ptr.
11331134 decltype (r.fDevice ) device;
11341135 device = make_matching<decltype (device), DataProcessingDevice>(ref, serviceRegistry, processingPolicies);
11351136
1136- ServiceRegistryRef ref{serviceRegistry};
1137- ref.get <RawDeviceService>().setDevice (device.get ());
1137+ serviceRef.get <RawDeviceService>().setDevice (device.get ());
11381138 r.fDevice = std::move (device);
11391139 fair::Logger::SetConsoleColor (false );
11401140
@@ -1144,7 +1144,7 @@ int doChild(int argc, char** argv, ServiceRegistry& serviceRegistry,
11441144 serviceRegistry.declareService (service, *deviceState.get (), r.fConfig );
11451145 }
11461146 if (ResourcesMonitoringHelper::isResourcesMonitoringEnabled (spec.resourceMonitoringInterval )) {
1147- ref .get <Monitoring>().enableProcessMonitoring (spec.resourceMonitoringInterval , {PmMeasurement::Cpu, PmMeasurement::Mem, PmMeasurement::Smaps});
1147+ serviceRef .get <Monitoring>().enableProcessMonitoring (spec.resourceMonitoringInterval , {PmMeasurement::Cpu, PmMeasurement::Mem, PmMeasurement::Smaps});
11481148 }
11491149 };
11501150
@@ -1339,7 +1339,8 @@ int runStateMachine(DataProcessorSpecs const& workflow,
13391339 service.driverStartup (serviceRegistry, varmap);
13401340 }
13411341
1342- serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<DevicesManager>(devicesManager));
1342+ ServiceRegistryRef ref{serviceRegistry};
1343+ ref.registerService (ServiceRegistryHelpers::handleForService<DevicesManager>(devicesManager));
13431344
13441345 GuiCallbackContext guiContext;
13451346 guiContext.plugin = debugGUI;
@@ -1350,17 +1351,17 @@ int runStateMachine(DataProcessorSpecs const& workflow,
13501351
13511352 // This is to make sure we can process metrics, commands, configuration
13521353 // changes coming from websocket (or even via any standard uv_stream_t, I guess).
1353- DriverServerContext serverContext;
1354- serverContext .registry = & serviceRegistry;
1355- serverContext .loop = loop;
1356- serverContext .controls = &controls;
1357- serverContext .infos = &infos;
1358- serverContext .specs = &runningWorkflow.devices ;
1359- serverContext .metrics = &metricsInfos;
1360- serverContext. driver = &driverInfo;
1361- serverContext. metricProcessingCallbacks = &metricProcessingCallbacks;
1362- serverContext .gui = &guiContext;
1363- serverContext .isDriver = frameworkId.empty ();
1354+ DriverServerContext serverContext{
1355+ .registry = { serviceRegistry},
1356+ .loop = loop,
1357+ .controls = &controls,
1358+ .infos = &infos,
1359+ .specs = &runningWorkflow.devices ,
1360+ .metrics = &metricsInfos,
1361+ . metricProcessingCallbacks = &metricProcessingCallbacks,
1362+ . driver = &driverInfo,
1363+ .gui = &guiContext,
1364+ .isDriver = frameworkId.empty ()} ;
13641365
13651366 uv_tcp_t serverHandle;
13661367 serverHandle.data = &serverContext;
0 commit comments