From 89f04302420d1382b0743b24b5f5847072f12dd9 Mon Sep 17 00:00:00 2001 From: DarkSky <25152247+darkskygit@users.noreply.github.com> Date: Tue, 13 Jan 2026 01:07:59 +0800 Subject: [PATCH] fix: race conditions (y-crdt/y-octo#51) --- packages/common/y-octo/core/src/doc/codec/content.rs | 11 ++++++++++- packages/common/y-octo/core/src/doc/types/mod.rs | 7 ++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/common/y-octo/core/src/doc/codec/content.rs b/packages/common/y-octo/core/src/doc/codec/content.rs index a5bd7c96e1..bdf09e1de4 100644 --- a/packages/common/y-octo/core/src/doc/codec/content.rs +++ b/packages/common/y-octo/core/src/doc/codec/content.rs @@ -286,7 +286,16 @@ mod tests { let mut reader = RawDecoder::new(&update); let tag_type = reader.read_u8()?; - assert_eq!(Content::read(&mut reader, tag_type)?, *content); + let decoded = Content::read(&mut reader, tag_type)?; + match (&decoded, content) { + (Content::Type(decoded_ty), Content::Type(original_ty)) => { + let decoded_ty = decoded_ty.ty().expect("decoded ytype must exist"); + let original_ty = original_ty.ty().expect("original ytype must exist"); + assert_eq!(decoded_ty.kind(), original_ty.kind()); + assert_eq!(decoded_ty.name.as_deref(), original_ty.name.as_deref()); + } + _ => assert_eq!(decoded, *content), + } Ok(()) } diff --git a/packages/common/y-octo/core/src/doc/types/mod.rs b/packages/common/y-octo/core/src/doc/types/mod.rs index 2322643431..3468952123 100644 --- a/packages/common/y-octo/core/src/doc/types/mod.rs +++ b/packages/common/y-octo/core/src/doc/types/mod.rs @@ -55,12 +55,9 @@ impl PartialEq for YType { impl PartialEq for YTypeRef { fn eq(&self, other: &Self) -> bool { + // only check pointer equality + // currently no scenarios that involve cross document ytype comparisons self.inner.ptr_eq(&other.inner) - || match (self.ty(), other.ty()) { - (Some(l), Some(r)) => *l == *r, - (None, None) => true, - _ => false, - } } }