From 92fb0a4afa5054b6cc3e8eb395facaa337d1c454 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 22 Mar 2023 15:14:02 -0700 Subject: [PATCH] client: fix delta sync of Compound cf. cc5d38293042cb2a37e4c61d4f20f2095951180e --- src/clientmon.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/clientmon.cpp b/src/clientmon.cpp index 3adfaf3..64101b1 100644 --- a/src/clientmon.cpp +++ b/src/clientmon.cpp @@ -554,9 +554,10 @@ void Connection::handle_MONITOR() * copy unmarked from prototype -> data */ { + auto desc = Value::Helper::desc(info->prototype); auto delta = Value::Helper::store_ptr(data); auto complete = Value::Helper::store_ptr(info->prototype); - auto N = Value::Helper::desc(info->prototype)->size(); + auto N = desc->size(); for(size_t i=0u; i < N; i++, delta++, complete++) { const auto src = delta->valid ? delta : complete; @@ -578,7 +579,13 @@ void Connection::handle_MONITOR() dst->as>() = src->as>(); break; case StoreType::Compound: - dst->as().copyIn(&src->store, StoreType::Compound); + { + std::shared_ptr sstore(Value::Helper::store(data), + src); + auto& dfld(dst->as()); + Value::Helper::set_desc(dfld, &desc[i]); + Value::Helper::store(dfld) = std::move(sstore); + } break; } }