@@ -34,7 +34,7 @@ pub type StdShMem = OsShMem;
3434use core:: fmt:: Debug ;
3535use serde:: { Deserialize , Serialize } ;
3636#[ cfg( feature = "std" ) ]
37- use std:: env;
37+ use std:: { env, sync :: Mutex } ;
3838
3939use alloc:: { rc:: Rc , string:: ToString } ;
4040use core:: cell:: RefCell ;
@@ -209,7 +209,7 @@ pub trait ShMemProvider: Send + Clone + Default + Debug {
209209#[ derive( Debug , Clone ) ]
210210pub struct RcShMem < T : ShMemProvider > {
211211 internal : ManuallyDrop < T :: Mem > ,
212- provider : Rc < RefCell < T > > ,
212+ provider : Rc < Mutex < RefCell < T > > > ,
213213}
214214
215215impl < T > ShMem for RcShMem < T >
@@ -235,7 +235,7 @@ where
235235
236236impl < T : ShMemProvider > Drop for RcShMem < T > {
237237 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 )
239239 }
240240}
241241
@@ -244,7 +244,7 @@ impl<T: ShMemProvider> Drop for RcShMem<T> {
244244/// Useful if the `ShMemProvider` needs to keep local state.
245245#[ derive( Debug , Clone ) ]
246246pub struct RcShMemProvider < T : ShMemProvider > {
247- internal : Rc < RefCell < T > > ,
247+ internal : Rc < Mutex < RefCell < T > > > ,
248248}
249249
250250unsafe impl < T : ShMemProvider > Send for RcShMemProvider < T > { }
@@ -257,37 +257,37 @@ where
257257
258258 fn new ( ) -> Result < Self , Error > {
259259 Ok ( Self {
260- internal : Rc :: new ( RefCell :: new ( T :: new ( ) ?) ) ,
260+ internal : Rc :: new ( Mutex :: new ( RefCell :: new ( T :: new ( ) ?) ) ) ,
261261 } )
262262 }
263263
264264 fn new_map ( & mut self , map_size : usize ) -> Result < Self :: Mem , Error > {
265265 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) ?) ,
267267 provider : self . internal . clone ( ) ,
268268 } )
269269 }
270270
271271 fn from_id_and_size ( & mut self , id : ShMemId , size : usize ) -> Result < Self :: Mem , Error > {
272272 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) ?) ,
274274 provider : self . internal . clone ( ) ,
275275 } )
276276 }
277277
278278 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 )
280280 }
281281
282282 fn clone_ref ( & mut self , mapping : & Self :: Mem ) -> Result < Self :: Mem , Error > {
283283 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 ) ?) ,
285285 provider : self . internal . clone ( ) ,
286286 } )
287287 }
288288
289289 fn post_fork ( & mut self ) {
290- self . internal . borrow_mut ( ) . post_fork ( )
290+ self . internal . lock ( ) . unwrap ( ) . borrow_mut ( ) . post_fork ( )
291291 }
292292}
293293
0 commit comments