1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// The doc tests allow us to do a compile_fail test, which is cool and what we want, but we don't
// want to expose this in the docs, so we use a private struct for that reason.
//
// Note we also bundle one that *does* compile with each, just to make sure they don't silently
// not-compile by some different reason.
//! ```rust,compile_fail
//! let shared = arc_swap::ArcSwap::from_pointee(std::cell::Cell::new(42));
//! std::thread::spawn(|| {
//!     drop(shared);
//! });
//! ```
//!
//! ```rust
//! let shared = arc_swap::ArcSwap::from_pointee(42);
//! std::thread::spawn(|| {
//!     drop(shared);
//! });
//! ```
//!
//! ```rust,compile_fail
//! extern crate arc_swap;
//! extern crate crossbeam_utils;
//! let shared = arc_swap::ArcSwap::from_pointee(std::cell::Cell::new(42));
//! let guard = shared.load_signal_safe();
//! crossbeam_utils::thread::scope(|scope| {
//!     scope.spawn(|_| {
//!         drop(guard);
//!     });
//! }).unwrap();
//! ```
//!
//! ```rust
//! extern crate arc_swap;
//! extern crate crossbeam_utils;
//! let shared = arc_swap::ArcSwap::from_pointee(42);
//! let guard = shared.load_signal_safe();
//! crossbeam_utils::thread::scope(|scope| {
//!     scope.spawn(|_| {
//!         drop(guard);
//!     });
//! }).unwrap();
//! ```
//!
//! ```rust,compile_fail
//! let shared = arc_swap::ArcSwap::from_pointee(std::cell::Cell::new(42));
//! let guard = shared.load();
//! std::thread::spawn(|| {
//!     drop(guard);
//! });
//! ```
//!
//! ```rust
//! let shared = arc_swap::ArcSwap::from_pointee(42);
//! let guard = shared.load();
//! std::thread::spawn(|| {
//!     drop(guard);
//! });
//! ```
//!
//! ```rust,compile_fail
//! extern crate arc_swap;
//! extern crate crossbeam_utils;
//! let shared = arc_swap::ArcSwap::from_pointee(std::cell::Cell::new(42));
//! crossbeam_utils::thread::scope(|scope| {
//!     scope.spawn(|_| {
//!         let _ = &shared;
//!     });
//! }).unwrap();
//! ```
//!
//! ```rust
//! extern crate arc_swap;
//! extern crate crossbeam_utils;
//! let shared = arc_swap::ArcSwap::from_pointee(42);
//! crossbeam_utils::thread::scope(|scope| {
//!     scope.spawn(|_| {
//!         let _ = &shared;
//!     });
//! }).unwrap();
//! ```
//!
//! ```rust,compile_fail
//! extern crate arc_swap;
//! extern crate crossbeam_utils;
//! let shared = arc_swap::ArcSwap::from_pointee(std::cell::Cell::new(42));
//! let guard = shared.load_signal_safe();
//! crossbeam_utils::thread::scope(|scope| {
//!     scope.spawn(|_| {
//!         let _ = &guard;
//!     });
//! }).unwrap();
//! ```
//!
//! ```rust
//! extern crate arc_swap;
//! extern crate crossbeam_utils;
//! let shared = arc_swap::ArcSwap::from_pointee(42);
//! let guard = shared.load_signal_safe();
//! crossbeam_utils::thread::scope(|scope| {
//!     scope.spawn(|_| {
//!         let _ = &guard;
//!     });
//! }).unwrap();
//! ```
//!
//! ```rust,compile_fail
//! extern crate arc_swap;
//! extern crate crossbeam_utils;
//! let shared = arc_swap::ArcSwap::from_pointee(std::cell::Cell::new(42));
//! let guard = shared.load();
//! crossbeam_utils::thread::scope(|scope| {
//!     scope.spawn(|_| {
//!         let _ = &guard;
//!     });
//! }).unwrap();
//! ```
//!
//! ```rust
//! extern crate arc_swap;
//! extern crate crossbeam_utils;
//! let shared = arc_swap::ArcSwap::from_pointee(42);
//! let guard = shared.load();
//! crossbeam_utils::thread::scope(|scope| {
//!     scope.spawn(|_| {
//!         let _ = &guard;
//!     });
//! }).unwrap();
//! ```
//!
//! See that ArcSwapAny<Rc> really isn't Send.
//! ```rust
//! use std::sync::Arc;
//! use arc_swap::ArcSwapAny;
//!
//! let a: ArcSwapAny<Arc<usize>> = ArcSwapAny::new(Arc::new(42));
//! std::thread::spawn(move || drop(a));
//! ```
//!
//! ```rust,compile_fail
//! use std::rc::Rc;
//! use arc_swap::ArcSwapAny;
//!
//! let a: ArcSwapAny<Rc<usize>> = ArcSwapAny::new(Rc::new(42));
//! std::thread::spawn(move || drop(a));
//! ```