summaryrefslogtreecommitdiff
path: root/src/network.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network.cpp')
-rw-r--r--src/network.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/network.cpp b/src/network.cpp
index eab0f67..c0bcc2a 100644
--- a/src/network.cpp
+++ b/src/network.cpp
@@ -550,16 +550,22 @@ void Server::Peer::updateService(ReplyBuilder & reply)
for (auto & x : serviceQueue) {
if (auto ref = std::get<1>(x)->check(reply)) {
if (lpeer) {
- Service::Context ctx(new Service::Context::Priv {
- .ref = *ref,
- .peer = erebos::Peer(lpeer),
- });
-
- for (auto & svc : server.services)
- if (svc->uuid() == std::get<UUID>(x)) {
- svc->handle(ctx);
- break;
+ server.localHead.update([&] (const Stored<LocalState> & local) {
+ Service::Context ctx(new Service::Context::Priv {
+ .ref = *ref,
+ .peer = erebos::Peer(lpeer),
+ .local = local,
+ });
+
+ for (auto & svc : server.services) {
+ if (svc->uuid() == std::get<UUID>(x)) {
+ svc->handle(ctx);
+ break;
+ }
}
+
+ return ctx.local();
+ });
}
} else {
next.push_back(std::move(x));