@@ -34,7 +34,7 @@ pub type StdShMem = OsShMem;
34
34
use core:: fmt:: Debug ;
35
35
use serde:: { Deserialize , Serialize } ;
36
36
#[ cfg( feature = "std" ) ]
37
- use std:: env;
37
+ use std:: { env, sync :: Mutex } ;
38
38
39
39
use alloc:: { rc:: Rc , string:: ToString } ;
40
40
use core:: cell:: RefCell ;
@@ -209,7 +209,7 @@ pub trait ShMemProvider: Send + Clone + Default + Debug {
209
209
#[ derive( Debug , Clone ) ]
210
210
pub struct RcShMem < T : ShMemProvider > {
211
211
internal : ManuallyDrop < T :: Mem > ,
212
- provider : Rc < RefCell < T > > ,
212
+ provider : Rc < Mutex < RefCell < T > > > ,
213
213
}
214
214
215
215
impl < T > ShMem for RcShMem < T >
@@ -235,7 +235,7 @@ where
235
235
236
236
impl < T : ShMemProvider > Drop for RcShMem < T > {
237
237
fn drop ( & mut self ) {
238
- self . provider . borrow_mut ( ) . release_map ( & mut self . internal )
238
+ self . provider . lock ( ) . unwrap ( ) . borrow_mut ( ) . release_map ( & mut self . internal )
239
239
}
240
240
}
241
241
@@ -244,7 +244,7 @@ impl<T: ShMemProvider> Drop for RcShMem<T> {
244
244
/// Useful if the `ShMemProvider` needs to keep local state.
245
245
#[ derive( Debug , Clone ) ]
246
246
pub struct RcShMemProvider < T : ShMemProvider > {
247
- internal : Rc < RefCell < T > > ,
247
+ internal : Rc < Mutex < RefCell < T > > > ,
248
248
}
249
249
250
250
unsafe impl < T : ShMemProvider > Send for RcShMemProvider < T > { }
@@ -257,37 +257,37 @@ where
257
257
258
258
fn new ( ) -> Result < Self , Error > {
259
259
Ok ( Self {
260
- internal : Rc :: new ( RefCell :: new ( T :: new ( ) ?) ) ,
260
+ internal : Rc :: new ( Mutex :: new ( RefCell :: new ( T :: new ( ) ?) ) ) ,
261
261
} )
262
262
}
263
263
264
264
fn new_map ( & mut self , map_size : usize ) -> Result < Self :: Mem , Error > {
265
265
Ok ( Self :: Mem {
266
- internal : ManuallyDrop :: new ( self . internal . borrow_mut ( ) . new_map ( map_size) ?) ,
266
+ internal : ManuallyDrop :: new ( self . internal . lock ( ) . unwrap ( ) . borrow_mut ( ) . new_map ( map_size) ?) ,
267
267
provider : self . internal . clone ( ) ,
268
268
} )
269
269
}
270
270
271
271
fn from_id_and_size ( & mut self , id : ShMemId , size : usize ) -> Result < Self :: Mem , Error > {
272
272
Ok ( Self :: Mem {
273
- internal : ManuallyDrop :: new ( self . internal . borrow_mut ( ) . from_id_and_size ( id, size) ?) ,
273
+ internal : ManuallyDrop :: new ( self . internal . lock ( ) . unwrap ( ) . borrow_mut ( ) . from_id_and_size ( id, size) ?) ,
274
274
provider : self . internal . clone ( ) ,
275
275
} )
276
276
}
277
277
278
278
fn release_map ( & mut self , map : & mut Self :: Mem ) {
279
- self . internal . borrow_mut ( ) . release_map ( & mut map. internal )
279
+ self . internal . lock ( ) . unwrap ( ) . borrow_mut ( ) . release_map ( & mut map. internal )
280
280
}
281
281
282
282
fn clone_ref ( & mut self , mapping : & Self :: Mem ) -> Result < Self :: Mem , Error > {
283
283
Ok ( Self :: Mem {
284
- internal : ManuallyDrop :: new ( self . internal . borrow_mut ( ) . clone_ref ( & mapping. internal ) ?) ,
284
+ internal : ManuallyDrop :: new ( self . internal . lock ( ) . unwrap ( ) . borrow_mut ( ) . clone_ref ( & mapping. internal ) ?) ,
285
285
provider : self . internal . clone ( ) ,
286
286
} )
287
287
}
288
288
289
289
fn post_fork ( & mut self ) {
290
- self . internal . borrow_mut ( ) . post_fork ( )
290
+ self . internal . lock ( ) . unwrap ( ) . borrow_mut ( ) . post_fork ( )
291
291
}
292
292
}
293
293
0 commit comments