Relax Sync
restriction on Device
and Host
Originally this restriction was placed due to uncertainty around the thread safety of the ASIO API. While the ASIO API itself makes no thread-safety guarantees that we are aware of, the `asio-sys` high-level bindings enforce synchronised access to the API and state transitions via a mutex.
This commit is contained in:
parent
ca2aceb536
commit
32d39bcfd3
@ -48,18 +48,11 @@ macro_rules! impl_platform_host {
|
||||
///
|
||||
/// This type may be constructed via the **host_from_id** function. **HostId**s may
|
||||
/// be acquired via the **ALL_HOSTS** const and the **available_hosts** function.
|
||||
// `Host` and `Device` cannot assume to be `Sync` as we have not yet been able to confirm
|
||||
// whether or not the ASIO API is thread-safe.
|
||||
//
|
||||
// TODO: Try to contact ASIO to get more information. Review the existing implementation of
|
||||
// the `asio` backend's `Host` and `Driver` types and see if the existing `Arc`s and
|
||||
// `Mutex`s don't already make the API `Sync`.
|
||||
pub struct Host(HostInner, crate::platform::NotSyncAcrossAllPlatforms);
|
||||
pub struct Host(HostInner);
|
||||
|
||||
/// The **Device** implementation associated with the platform's dynamically dispatched
|
||||
/// **Host** type.
|
||||
// See comment above `Host` for reasoning behind `NotSyncAcrossAllPlatforms`.
|
||||
pub struct Device(DeviceInner, crate::platform::NotSyncAcrossAllPlatforms);
|
||||
pub struct Device(DeviceInner);
|
||||
|
||||
/// The **Devices** iterator associated with the platform's dynamically dispatched **Host**
|
||||
/// type.
|
||||
@ -348,7 +341,7 @@ macro_rules! impl_platform_host {
|
||||
|
||||
impl From<DeviceInner> for Device {
|
||||
fn from(d: DeviceInner) -> Self {
|
||||
Device(d, Default::default())
|
||||
Device(d)
|
||||
}
|
||||
}
|
||||
|
||||
@ -360,7 +353,7 @@ macro_rules! impl_platform_host {
|
||||
|
||||
impl From<HostInner> for Host {
|
||||
fn from(h: HostInner) -> Self {
|
||||
Host(h, Default::default())
|
||||
Host(h)
|
||||
}
|
||||
}
|
||||
|
||||
@ -554,15 +547,6 @@ mod platform_impl {
|
||||
// A marker used to remove the `Send` and `Sync` traits.
|
||||
struct NotSendSyncAcrossAllPlatforms(std::marker::PhantomData<*mut ()>);
|
||||
|
||||
// A marker used to remove the `Sync` traits.
|
||||
struct NotSyncAcrossAllPlatforms(std::marker::PhantomData<std::cell::RefCell<()>>);
|
||||
|
||||
impl Default for NotSyncAcrossAllPlatforms {
|
||||
fn default() -> Self {
|
||||
NotSyncAcrossAllPlatforms(std::marker::PhantomData)
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for NotSendSyncAcrossAllPlatforms {
|
||||
fn default() -> Self {
|
||||
NotSendSyncAcrossAllPlatforms(std::marker::PhantomData)
|
||||
|
Loading…
x
Reference in New Issue
Block a user