From 4fe4e9cb7c5f11359e8b7acdf214bd63370929bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Wed, 11 Feb 2026 12:55:25 +0100 Subject: [PATCH] refactor(sdk-base): Add `CrossProcessStoreMode` to make cross-process lock optional --- crates/matrix-sdk-base/src/store/mod.rs | 36 ++++++++++++++++--------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/crates/matrix-sdk-base/src/store/mod.rs b/crates/matrix-sdk-base/src/store/mod.rs index 86d412a40..966f6a2fa 100644 --- a/crates/matrix-sdk-base/src/store/mod.rs +++ b/crates/matrix-sdk-base/src/store/mod.rs @@ -781,10 +781,11 @@ impl StateChanges { /// # Examples /// /// ``` -/// # use matrix_sdk_base::store::StoreConfig; +/// # use matrix_sdk_base::store::{CrossProcessStoreMode, StoreConfig}; /// # -/// let store_config = -/// StoreConfig::new("cross-process-store-locks-holder-name".to_owned()); +/// let store_config = StoreConfig::new(CrossProcessStoreMode::MultiProcess( +/// "cross-process-store-locks-holder-name".to_owned(), +/// )); /// ``` #[derive(Clone)] pub struct StoreConfig { @@ -793,7 +794,7 @@ pub struct StoreConfig { pub(crate) state_store: Arc, pub(crate) event_cache_store: event_cache_store::EventCacheStoreLock, pub(crate) media_store: media_store::MediaStoreLock, - cross_process_store_locks_holder_name: String, + cross_process_store_mode: CrossProcessStoreMode, } #[cfg(not(tarpaulin_include))] @@ -809,20 +810,20 @@ impl StoreConfig { /// To learn more about `cross_process_store_locks_holder_name`, please read /// [`CrossProcessLock::new`](matrix_sdk_common::cross_process_lock::CrossProcessLock::new). #[must_use] - pub fn new(cross_process_store_locks_holder_name: String) -> Self { + pub fn new(cross_process_store_mode: CrossProcessStoreMode) -> Self { Self { #[cfg(feature = "e2e-encryption")] crypto_store: matrix_sdk_crypto::store::MemoryStore::new().into_crypto_store(), state_store: Arc::new(MemoryStore::new()), event_cache_store: event_cache_store::EventCacheStoreLock::new( event_cache_store::MemoryStore::new(), - cross_process_store_locks_holder_name.clone(), + cross_process_store_mode.clone(), ), media_store: media_store::MediaStoreLock::new( media_store::MemoryMediaStore::new(), - cross_process_store_locks_holder_name.clone(), + cross_process_store_mode.clone(), ), - cross_process_store_locks_holder_name, + cross_process_store_mode, } } @@ -848,7 +849,7 @@ impl StoreConfig { { self.event_cache_store = event_cache_store::EventCacheStoreLock::new( event_cache_store, - self.cross_process_store_locks_holder_name.clone(), + self.cross_process_store_mode.clone(), ); self } @@ -858,14 +859,23 @@ impl StoreConfig { where S: media_store::IntoMediaStore, { - self.media_store = media_store::MediaStoreLock::new( - media_store, - self.cross_process_store_locks_holder_name.clone(), - ); + self.media_store = + media_store::MediaStoreLock::new(media_store, self.cross_process_store_mode.clone()); self } } +/// The cross-process mode for `Store`s. +#[derive(Clone, Debug)] +pub enum CrossProcessStoreMode { + /// The stores will be used in multiple processes, the holder name for the + /// cross-process lock is the associated `String`. + MultiProcess(String), + /// The stores will be used in a single process, there is no need for a + /// cross-process lock. + SingleProcess, +} + #[cfg(test)] mod tests { use std::{ops::Not, sync::Arc};