@@ -8,7 +8,7 @@ use std::mem::drop;
8
8
use std:: net:: { SocketAddr , TcpStream , ToSocketAddrs } ;
9
9
use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
10
10
use std:: sync:: mpsc:: { channel, Receiver , Sender } ;
11
- use std:: sync:: { Mutex , TryLockError } ;
11
+ use std:: sync:: { Arc , Mutex , TryLockError } ;
12
12
use std:: time:: Duration ;
13
13
14
14
#[ allow( unused_imports) ]
@@ -352,7 +352,7 @@ impl RawClient<ElectrumProxyStream> {
352
352
enum ChannelMessage {
353
353
Response ( serde_json:: Value ) ,
354
354
WakeUp ,
355
- Error ,
355
+ Error ( Arc < std :: io :: Error > ) ,
356
356
}
357
357
358
358
impl < S : Read + Write > RawClient < S > {
@@ -398,9 +398,10 @@ impl<S: Read + Write> RawClient<S> {
398
398
loop {
399
399
raw_resp. clear ( ) ;
400
400
401
- if reader. read_line ( & mut raw_resp) . is_err ( ) {
401
+ if let Err ( e) = reader. read_line ( & mut raw_resp) {
402
+ let error = Arc :: new ( e) ;
402
403
for ( _, s) in self . waiting_map . lock ( ) . unwrap ( ) . drain ( ) {
403
- s. send ( ChannelMessage :: Error )
404
+ s. send ( ChannelMessage :: Error ( error . clone ( ) ) )
404
405
. expect ( "Unable to send ChannelMessage::Error" ) ;
405
406
}
406
407
}
@@ -531,10 +532,10 @@ impl<S: Read + Write> RawClient<S> {
531
532
532
533
continue ;
533
534
}
534
- Ok ( ChannelMessage :: Error ) => {
535
+ Ok ( ChannelMessage :: Error ( e ) ) => {
535
536
warn ! ( "Received ChannelMessage::Error" ) ;
536
537
537
- break Err ( Error :: ChannelError ) ;
538
+ break Err ( Error :: ChannelError ( e ) ) ;
538
539
}
539
540
e @ Err ( _) => e. map ( |_| ( ) ) . expect ( "Error receiving from channel" ) , // panic if there's something wrong with the channels
540
541
}
0 commit comments