@@ -26,7 +26,9 @@ mod _ssl {
26
26
use crate :: {
27
27
common:: {
28
28
ascii,
29
- lock:: { PyMutex , PyRwLock , PyRwLockWriteGuard } ,
29
+ lock:: {
30
+ PyMappedRwLockReadGuard , PyMutex , PyRwLock , PyRwLockReadGuard , PyRwLockWriteGuard ,
31
+ } ,
30
32
} ,
31
33
socket:: { self , PySocket } ,
32
34
vm:: {
@@ -504,12 +506,8 @@ mod _ssl {
504
506
fn builder ( & self ) -> PyRwLockWriteGuard < ' _ , SslContextBuilder > {
505
507
self . ctx . write ( )
506
508
}
507
- fn exec_ctx < F , R > ( & self , func : F ) -> R
508
- where
509
- F : Fn ( & ssl:: SslContextRef ) -> R ,
510
- {
511
- let c = self . ctx . read ( ) ;
512
- func ( builder_as_ctx ( & c) )
509
+ fn ctx ( & self ) -> PyMappedRwLockReadGuard < ' _ , ssl:: SslContextRef > {
510
+ PyRwLockReadGuard :: map ( self . ctx . read ( ) , builder_as_ctx)
513
511
}
514
512
515
513
#[ pygetset]
@@ -554,7 +552,7 @@ mod _ssl {
554
552
}
555
553
#[ pygetset]
556
554
fn verify_mode ( & self ) -> i32 {
557
- let mode = self . exec_ctx ( | ctx| ctx . verify_mode ( ) ) ;
555
+ let mode = self . ctx ( ) . verify_mode ( ) ;
558
556
if mode == SslVerifyMode :: NONE {
559
557
CertRequirements :: None . into ( )
560
558
} else if mode == SslVerifyMode :: PEER {
@@ -703,16 +701,15 @@ mod _ssl {
703
701
vm : & VirtualMachine ,
704
702
) -> PyResult < Vec < PyObjectRef > > {
705
703
let binary_form = binary_form. unwrap_or ( false ) ;
706
- self . exec_ctx ( |ctx| {
707
- let certs = ctx
708
- . cert_store ( )
709
- . objects ( )
710
- . iter ( )
711
- . filter_map ( |obj| obj. x509 ( ) )
712
- . map ( |cert| cert_to_py ( vm, cert, binary_form) )
713
- . collect :: < Result < Vec < _ > , _ > > ( ) ?;
714
- Ok ( certs)
715
- } )
704
+ let certs = self
705
+ . ctx ( )
706
+ . cert_store ( )
707
+ . objects ( )
708
+ . iter ( )
709
+ . filter_map ( |obj| obj. x509 ( ) )
710
+ . map ( |cert| cert_to_py ( vm, cert, binary_form) )
711
+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
712
+ Ok ( certs)
716
713
}
717
714
718
715
#[ pymethod]
@@ -746,9 +743,7 @@ mod _ssl {
746
743
args : WrapSocketArgs ,
747
744
vm : & VirtualMachine ,
748
745
) -> PyResult < PySslSocket > {
749
- let mut ssl = zelf
750
- . exec_ctx ( ssl:: Ssl :: new)
751
- . map_err ( |e| convert_openssl_error ( vm, e) ) ?;
746
+ let mut ssl = ssl:: Ssl :: new ( & zelf. ctx ( ) ) . map_err ( |e| convert_openssl_error ( vm, e) ) ?;
752
747
753
748
let socket_type = if args. server_side {
754
749
ssl. set_accept_state ( ) ;
0 commit comments