@@ -2,13 +2,11 @@ use std::convert::TryInto;
22use std:: future:: Future ;
33use std:: io:: IoSlice ;
44use std:: net:: { Ipv4Addr , Ipv6Addr , SocketAddr , SocketAddrV4 , SocketAddrV6 } ;
5- use std:: sync:: Arc ;
65use std:: time:: Duration ;
76
87use anyhow:: Result ;
9- use tokio:: io:: { AsyncReadExt , AsyncWriteExt } ;
10- use tokio:: net:: { TcpListener , TcpStream } ;
11- use tokio:: sync:: Mutex ;
8+ use async_std:: io:: { ReadExt , WriteExt } ;
9+ use async_std:: net:: { TcpListener , TcpStream } ;
1210use wasmtime:: { Caller , FuncType , Linker , ValType } ;
1311use wasmtime:: { Memory , Trap } ;
1412
@@ -211,7 +209,7 @@ fn resolve(
211209 let name = std:: str:: from_utf8 ( buffer. as_slice ( ) ) . or_trap ( "lunatic::network::resolve" ) ?;
212210 // Check for timeout during lookup
213211 let return_ = if let Some ( result) = tokio:: select! {
214- _ = tokio :: time :: sleep( Duration :: from_millis( timeout as u64 ) ) , if timeout != 0 => None ,
212+ _ = async_std :: task :: sleep( Duration :: from_millis( timeout as u64 ) ) , if timeout != 0 => None ,
215213 result = tokio:: net:: lookup_host( name) => Some ( result)
216214 } {
217215 let ( iter_or_error_id, result) = match result {
@@ -463,11 +461,7 @@ fn tcp_accept(
463461
464462 let ( tcp_stream_or_error_id, peer_addr_iter, result) = match tcp_listener. accept ( ) . await {
465463 Ok ( ( stream, socket_addr) ) => {
466- let stream_id = caller
467- . data_mut ( )
468- . resources
469- . tcp_streams
470- . add ( Arc :: new ( Mutex :: new ( stream) ) ) ;
464+ let stream_id = caller. data_mut ( ) . resources . tcp_streams . add ( stream) ;
471465 let dns_iter_id = caller
472466 . data_mut ( )
473467 . resources
@@ -539,18 +533,11 @@ fn tcp_connect(
539533 ) ?;
540534
541535 if let Some ( result) = tokio:: select! {
542- _ = tokio :: time :: sleep( Duration :: from_millis( timeout as u64 ) ) , if timeout != 0 => None ,
536+ _ = async_std :: task :: sleep( Duration :: from_millis( timeout as u64 ) ) , if timeout != 0 => None ,
543537 result = TcpStream :: connect( socket_addr) => Some ( result)
544538 } {
545539 let ( stream_or_error_id, result) = match result {
546- Ok ( stream) => (
547- caller
548- . data_mut ( )
549- . resources
550- . tcp_streams
551- . add ( Arc :: new ( Mutex :: new ( stream) ) ) ,
552- 0 ,
553- ) ,
540+ Ok ( stream) => ( caller. data_mut ( ) . resources . tcp_streams . add ( stream) , 0 ) ,
554541 Err ( error) => ( caller. data_mut ( ) . errors . add ( error. into ( ) ) , 1 ) ,
555542 } ;
556543
@@ -660,17 +647,17 @@ fn tcp_write_vectored(
660647 . collect ( ) ;
661648 let vec_slices = vec_slices?;
662649
663- let stream_mutex = caller
650+ let mut stream = caller
664651 . data ( )
665652 . resources
666653 . tcp_streams
667654 . get ( stream_id)
668655 . or_trap ( "lunatic::network::tcp_write_vectored" ) ?
669656 . clone ( ) ;
670- let mut stream = stream_mutex . lock ( ) . await ;
657+
671658 // Check for timeout
672659 if let Some ( result) = tokio:: select! {
673- _ = tokio :: time :: sleep( Duration :: from_millis( timeout as u64 ) ) , if timeout != 0 => None ,
660+ _ = async_std :: task :: sleep( Duration :: from_millis( timeout as u64 ) ) , if timeout != 0 => None ,
674661 result = stream. write_vectored( vec_slices. as_slice( ) ) => Some ( result)
675662 } {
676663 let ( opaque, return_) = match result {
@@ -722,16 +709,14 @@ fn tcp_read(
722709 opaque_ptr : u32 ,
723710) -> Box < dyn Future < Output = Result < u32 , Trap > > + Send + ' _ > {
724711 Box :: new ( async move {
725- let stream_mutex = caller
712+ let mut stream = caller
726713 . data ( )
727714 . resources
728715 . tcp_streams
729716 . get ( stream_id)
730717 . or_trap ( "lunatic::network::tcp_read" ) ?
731718 . clone ( ) ;
732719
733- let mut stream = stream_mutex. lock ( ) . await ;
734-
735720 let memory = get_memory ( & mut caller) ?;
736721 let buffer = memory
737722 . data_mut ( & mut caller)
@@ -740,7 +725,7 @@ fn tcp_read(
740725
741726 // Check for timeout first
742727 if let Some ( result) = tokio:: select! {
743- _ = tokio :: time :: sleep( Duration :: from_millis( timeout as u64 ) ) , if timeout != 0 => None ,
728+ _ = async_std :: task :: sleep( Duration :: from_millis( timeout as u64 ) ) , if timeout != 0 => None ,
744729 result = stream. read( buffer) => Some ( result)
745730 } {
746731 let ( opaque, return_) = match result {
@@ -783,14 +768,13 @@ fn tcp_flush(
783768 error_id_ptr : u32 ,
784769) -> Box < dyn Future < Output = Result < u32 , Trap > > + Send + ' _ > {
785770 Box :: new ( async move {
786- let stream_mutex = caller
771+ let mut stream = caller
787772 . data ( )
788773 . resources
789774 . tcp_streams
790775 . get ( stream_id)
791776 . or_trap ( "lunatic::network::tcp_flush" ) ?
792777 . clone ( ) ;
793- let mut stream = stream_mutex. lock ( ) . await ;
794778
795779 let ( error_id, result) = match stream. flush ( ) . await {
796780 Ok ( ( ) ) => ( 0 , 0 ) ,
0 commit comments