From 1640adcf9d8e9b2006e552be5ccd856d0614c317 Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 12 Jun 2026 14:56:41 +0200 Subject: [PATCH] Fix thread-safety and dispatcher consistency in user status stubs --- .../android/libraries/matrix/impl/RustMatrixClient.kt | 10 +++++----- .../android/libraries/matrix/test/FakeMatrixClient.kt | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 37badadcd4..92107f3ac2 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -260,7 +260,7 @@ class RustMatrixClient( private var clientDelegateTaskHandle: TaskHandle? = innerClient.setDelegate(sessionDelegate) - private var localUserStatus: UserStatus? = null + @Volatile private var localUserStatus: UserStatus? = null private val _userProfile: MutableStateFlow = MutableStateFlow( MatrixUser( @@ -482,7 +482,7 @@ class RustMatrixClient( runCatchingExceptions { innerClient.removeAvatar() } } - override suspend fun setUserStatus(status: UserStatus): Result { + override suspend fun setUserStatus(status: UserStatus): Result = withContext(sessionDispatcher) { localUserStatus = status _userProfile.emit( _userProfile.value.copy( @@ -490,10 +490,10 @@ class RustMatrixClient( displayedStatus = DisplayedStatus.UserSet(status), ) ) - return Result.success(Unit) + Result.success(Unit) } - override suspend fun clearUserStatus(): Result { + override suspend fun clearUserStatus(): Result = withContext(sessionDispatcher) { localUserStatus = null _userProfile.emit( _userProfile.value.copy( @@ -501,7 +501,7 @@ class RustMatrixClient( displayedStatus = null, ) ) - return Result.success(Unit) + Result.success(Unit) } override suspend fun joinRoom(roomId: RoomId): Result = withContext(sessionDispatcher) { diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index dce089537f..a13b4b6ad6 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -258,7 +258,7 @@ class FakeMatrixClient( return removeAvatarResult } - override suspend fun setUserStatus(status: UserStatus): Result { + override suspend fun setUserStatus(status: UserStatus): Result = simulateLongTask { setUserStatusCalled = true if (setUserStatusResult.isSuccess) { _userProfile.emit(_userProfile.value.copy( @@ -269,7 +269,7 @@ class FakeMatrixClient( return setUserStatusResult } - override suspend fun clearUserStatus(): Result { + override suspend fun clearUserStatus(): Result = simulateLongTask { clearUserStatusCalled = true if (clearUserStatusResult.isSuccess) { _userProfile.emit(_userProfile.value.copy(