@@ -96,32 +96,30 @@ impl<N, P> AsyncClient<N, P> {
96
96
/// therefore unsafe to continue using.
97
97
pub fn deactivate ( self ) -> Result < ( Client , N , P ) , Error > {
98
98
let mut c = self ;
99
- unsafe {
100
- c. maybe_deactivate ( )
101
- . map ( |c| ( c. client , c. notification , c. process ) )
102
- }
99
+ c. maybe_deactivate ( )
100
+ . map ( |c| ( c. client , c. notification , c. process ) )
103
101
}
104
102
105
103
// Helper function for deactivating. Any function that calls this should
106
104
// have ownership of self and no longer use it after this call.
107
- unsafe fn maybe_deactivate ( & mut self ) -> Result < Box < CallbackContext < N , P > > , Error > {
108
- let _m = CREATE_OR_DESTROY_CLIENT_MUTEX . lock ( ) . ok ( ) ;
105
+ fn maybe_deactivate ( & mut self ) -> Result < Box < CallbackContext < N , P > > , Error > {
106
+ let m = CREATE_OR_DESTROY_CLIENT_MUTEX . lock ( ) ;
109
107
if self . callback . is_none ( ) {
108
+ drop ( m) ;
110
109
return Err ( Error :: ClientIsNoLongerAlive ) ;
111
110
}
112
111
let cb = self . callback . take ( ) . ok_or ( Error :: ClientIsNoLongerAlive ) ?;
113
- let client_ptr = cb. client . raw ( ) ;
114
-
115
112
// deactivate
116
- if j:: jack_deactivate ( client_ptr) != 0 {
113
+ if unsafe { j:: jack_deactivate ( cb. client . raw ( ) ) } != 0 {
114
+ drop ( m) ;
117
115
return Err ( Error :: ClientDeactivationError ) ;
118
116
}
119
117
120
118
// clear the callbacks
121
- clear_callbacks ( client_ptr ) ?;
119
+ unsafe { clear_callbacks ( cb . client . raw ( ) ) } ?;
122
120
// done, take ownership of callback
123
121
if cb. has_panic . load ( std:: sync:: atomic:: Ordering :: Relaxed ) {
124
- std :: mem :: forget ( cb ) ;
122
+ drop ( m ) ;
125
123
return Err ( Error :: ClientPanicked ) ;
126
124
}
127
125
Ok ( cb)
@@ -132,7 +130,7 @@ impl<N, P> AsyncClient<N, P> {
132
130
impl < N , P > Drop for AsyncClient < N , P > {
133
131
// Deactivate and close the client.
134
132
fn drop ( & mut self ) {
135
- let _ = unsafe { self . maybe_deactivate ( ) } ;
133
+ let _ = self . maybe_deactivate ( ) ;
136
134
}
137
135
}
138
136
0 commit comments