Fix March 2026 production panic regressions#943
Fix March 2026 production panic regressions#943zxch3n wants to merge 7 commits intoloro-dev:mainfrom
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a28c207df2
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| impl LoroDoc { | ||
| pub(crate) fn set_config(&self, config: &Configure) { | ||
| self.config_text_style(config.text_style_config.read().unwrap().clone()); | ||
| self.config_text_style(config.text_style_config.read_unpoisoned().clone()); |
There was a problem hiding this comment.
Use sync lock types before calling unpoison helpers
read_unpoisoned() here is being called on std::sync::RwLock, but RwLockExt is implemented only for crate::sync::RwLock in sync.rs (same pattern for MutexExt). That works in non-loom builds only because crate::sync aliases std there; under cfg(loom) the alias switches to loom::sync, so this method no longer exists on std::sync::RwLock and the loom configuration fails to compile. The same regression pattern appears in other files that still import std locks directly (e.g. awareness.rs, pre_commit.rs), so these lock fields/imports should be switched to crate::sync::{Mutex,RwLock} (or the trait impls broadened) before using the helper methods.
Useful? React with 👍 / 👎.
Summary
IdToCursorfragment-tail updates and zero-width update handlingimport_batch()regression that exercises the same split-tracking path seen in productionPoisonErrorpanicsMutexusers follow the same recovery ruleVerification
cargo test -p loro-internal stale_iterator_state_repairs_missing_same_peer_continuation -- --nocapturecargo test -p loro-internal larger_node_only_advances_consumed_slice -- --nocapturecargo test -p loro-internal repeated_tail_splits_keep_id_to_cursor_consistent -- --nocapturecargo test -p loro-internal zero_width_small_update_keeps_insert_set_non_empty -- --nocapturecargo test -p loro-internal large_update_can_replace_the_tail_range -- --nocapturecargo test -p loro-internal list_import_batch_stays_consistent_after_repeated_tail_splits -- --nocapturecargo test -p loro-internal poison -- --nocapturecargo check -p loro-internalNotes
ImVersionVectorexport panic still was not reproducible in this checkout; no speculative fix was included for that path/Users/zxch3n/Code/loro-ffion branchcodex/unpoison-locksand is not part of this PR