Or, if you’re feeling adventurous, you could try this shot in the dark to see if it happens to fix the issue:
diff --git a/dtool/src/dtoolbase/deletedBufferChain.cxx b/dtool/src/dtoolbase/deletedBufferChain.cxx
index d02f10e..ad016d1 100644
--- a/dtool/src/dtoolbase/deletedBufferChain.cxx
+++ b/dtool/src/dtoolbase/deletedBufferChain.cxx
@@ -56,8 +56,8 @@ allocate(size_t size, TypeHandle type_handle) {
_lock.release();
#ifdef USE_DELETEDCHAINFLAG
- assert(obj->_flag == (AtomicAdjust::Integer)DCF_deleted);
- obj->_flag = DCF_alive;
+ AtomicAdjust::Integer orig_flag = AtomicAdjust::compare_and_exchange(obj->_flag, DCF_deleted, DCF_alive);
+ assert(orig_flag == (AtomicAdjust::Integer)DCF_deleted);
#endif // USE_DELETEDCHAINFLAG
void *ptr = node_to_buffer(obj);
@@ -77,7 +77,7 @@ allocate(size_t size, TypeHandle type_handle) {
obj = (ObjectNode *)NeverFreeMemory::alloc(alloc_size);
#ifdef USE_DELETEDCHAINFLAG
- obj->_flag = DCF_alive;
+ AtomicAdjust::set(obj->_flag, DCF_alive);
#endif // USE_DELETEDCHAINFLAG
void *ptr = node_to_buffer(obj);
(Of course, re-enable atomics if you do try this.)