@@ -43,6 +43,7 @@ use ruma::{
43
43
space:: { child:: SpaceChildEventContent , parent:: SpaceParentEventContent } ,
44
44
} ,
45
45
} ;
46
+ use tokio:: sync:: Mutex as AsyncMutex ;
46
47
use tracing:: error;
47
48
48
49
use crate :: spaces:: graph:: SpaceGraph ;
@@ -95,7 +96,7 @@ pub struct SpaceService {
95
96
96
97
joined_spaces : Arc < Mutex < ObservableVector < SpaceRoom > > > ,
97
98
98
- room_update_handle : Mutex < Option < AbortOnDrop < ( ) > > > ,
99
+ room_update_handle : AsyncMutex < Option < AbortOnDrop < ( ) > > > ,
99
100
}
100
101
101
102
impl SpaceService {
@@ -104,7 +105,7 @@ impl SpaceService {
104
105
Self {
105
106
client,
106
107
joined_spaces : Arc :: new ( Mutex :: new ( ObservableVector :: new ( ) ) ) ,
107
- room_update_handle : Mutex :: new ( None ) ,
108
+ room_update_handle : AsyncMutex :: new ( None ) ,
108
109
}
109
110
}
110
111
@@ -113,12 +114,14 @@ impl SpaceService {
113
114
pub async fn subscribe_to_joined_spaces (
114
115
& self ,
115
116
) -> ( Vector < SpaceRoom > , VectorSubscriberBatchedStream < SpaceRoom > ) {
116
- if self . room_update_handle . lock ( ) . is_none ( ) {
117
+ let mut room_update_handle = self . room_update_handle . lock ( ) . await ;
118
+
119
+ if room_update_handle. is_none ( ) {
117
120
let client = self . client . clone ( ) ;
118
121
let joined_spaces = Arc :: clone ( & self . joined_spaces ) ;
119
122
let all_room_updates_receiver = self . client . subscribe_to_all_room_updates ( ) ;
120
123
121
- * self . room_update_handle . lock ( ) = Some ( AbortOnDrop :: new ( spawn ( async move {
124
+ * room_update_handle = Some ( AbortOnDrop :: new ( spawn ( async move {
122
125
pin_mut ! ( all_room_updates_receiver) ;
123
126
124
127
loop {
0 commit comments