-
Notifications
You must be signed in to change notification settings - Fork 125
Open
Description
Hi!
I'm working with futures (i.e my handlers are async
)
Ofter I need to protect my Service around Arc<Mutex<_>> where Arc and Mutex came from std. But when you are working with futures, it's better to use futures::lock::Mutex in order to avoid dead lock (see for example https://users.rust-lang.org/t/std-mutex-vs-futures-mutex-vs-futures-lock-mutex-for-async/41710/2)
So,
use futures::lock::Mutex;
use std::sync::{Arc};
#[derive(Clone, StateData)]
pub struct ChatServiceWrapper {
pub inner: Arc<Mutex<ChatService>>,
}
let chat_service = ChatServiceWrapper {
inner: Arc::new(Mutex::new(ChatService::new())),
};
let pipeline = new_pipeline()
.add(StateMiddleware::new(chat_service)) // <--- this goes to error
.build()
the error is
the type `std::cell::UnsafeCell<chat_service::ChatService>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary
`std::cell::UnsafeCell<chat_service::ChatService>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary
help: within `rest_api::ChatServiceWrapper`, the trait `std::panic::RefUnwindSafe` is not implemented for `std::cell::UnsafeCell<chat_service::ChatService>`
How can I fix this error??
Thanks a lot
Metadata
Metadata
Assignees
Labels
No labels