From 4ab49af7859dc233e6569d66b42755e4791c3b1e Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 1 May 2026 20:38:38 -0400 Subject: [PATCH] xo-object2: streamline write barriers for DList,DArray muts --- xo-alloc2/include/xo/alloc2/alloc/RAllocator.hpp | 8 +------- xo-object2/include/xo/object2/DList.hpp | 2 +- xo-object2/src/object2/DArray.cpp | 10 ---------- xo-object2/src/object2/DList.cpp | 9 ++------- xo-reader2/src/reader2/DExpectQListSsm.cpp | 2 +- 5 files changed, 5 insertions(+), 26 deletions(-) diff --git a/xo-alloc2/include/xo/alloc2/alloc/RAllocator.hpp b/xo-alloc2/include/xo/alloc2/alloc/RAllocator.hpp index e9fa633c..e661e59d 100644 --- a/xo-alloc2/include/xo/alloc2/alloc/RAllocator.hpp +++ b/xo-alloc2/include/xo/alloc2/alloc/RAllocator.hpp @@ -80,16 +80,10 @@ namespace xo { lhs_iface, lhs_data, rhs_iface, rhs_data); } + // see [RAllocator_aux.hpp] for implementation. void barrier_assign(void * parent, obj * p_lhs, obj rhs) noexcept; -#ifdef NOT_YET - this->barrier_assign_aux(parent, - p_lhs->iface(), - p_lhs->opaque_data_addr(), - rhs.iface(), - rhs.opaque_data()); -#endif static bool _valid; }; diff --git a/xo-object2/include/xo/object2/DList.hpp b/xo-object2/include/xo/object2/DList.hpp index b5c340c8..fbc64784 100644 --- a/xo-object2/include/xo/object2/DList.hpp +++ b/xo-object2/include/xo/object2/DList.hpp @@ -67,7 +67,7 @@ namespace xo { void assign_head(obj mm, obj h); void assign_head_gc(obj gc, obj h); /** assign rest-pointer. Caller responsible for preserving acyclic property! **/ - void _assign_rest(DList * r); + void _assign_rest(obj mm, DList * r); /** pretty-printing driver; combine layout+printing **/ bool pretty(const ppindentinfo & ppii) const; diff --git a/xo-object2/src/object2/DArray.cpp b/xo-object2/src/object2/DArray.cpp index aeb03196..49c3d64f 100644 --- a/xo-object2/src/object2/DArray.cpp +++ b/xo-object2/src/object2/DArray.cpp @@ -80,14 +80,8 @@ namespace xo { if (ix >= size_) return false; - scope log(XO_DEBUG(true), "need write barrier"); - mm.barrier_assign(this, &elts_[ix], x); - //mm.barrier_assign_aux(this, - // elts_[ix].iface(), elts_[ix].opaque_data_addr(), - // x.iface(), x.opaque_data()); - return true; } @@ -104,10 +98,6 @@ namespace xo { mm.barrier_assign(this, &elts_[size_], elt); - //mm.barrier_assign_aux(this, - // elts_[size_].iface(), elts_[size_].opaque_data_addr(), - // elt.iface(), elt.opaque_data()); - ++(this->size_); return true; diff --git a/xo-object2/src/object2/DList.cpp b/xo-object2/src/object2/DList.cpp index 75bde74c..b8494c34 100644 --- a/xo-object2/src/object2/DList.cpp +++ b/xo-object2/src/object2/DList.cpp @@ -141,20 +141,15 @@ namespace xo { } void - DList::_assign_rest(DList * rest) + DList::_assign_rest(obj mm, DList * rest) { - scope log(XO_DEBUG(true), "need write barrier"); - -#ifdef NOT_YET obj rest_gco(rest); mm.barrier_assign_aux(this, nullptr /*lhs iface unused*/, - &(this->rest_), + (void**)&(this->rest_), rest_gco.iface(), rest); -#endif - this->rest_ = rest; } bool diff --git a/xo-reader2/src/reader2/DExpectQListSsm.cpp b/xo-reader2/src/reader2/DExpectQListSsm.cpp index 184bcc41..8ea243ca 100644 --- a/xo-reader2/src/reader2/DExpectQListSsm.cpp +++ b/xo-reader2/src/reader2/DExpectQListSsm.cpp @@ -184,7 +184,7 @@ namespace xo { if (this->end_) { /* DExpectQListSsm owns {start_, end_} -> preserves acyclic property */ - end_->_assign_rest(new_last); + end_->_assign_rest(p_psm->expr_alloc(), new_last); this->end_ = new_last; } else {