@@ -494,12 +494,13 @@ struct wolfssl_stream::impl
494494 read_in_buf_.data () + read_in_len_,
495495 read_in_buf_.size () - read_in_len_);
496496
497- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
497+ auto [lec] = co_await io_cm_.lock ();
498498 if (lec)
499499 {
500500 current_op_ = nullptr ;
501501 co_return {lec, total_read};
502502 }
503+ capy::async_mutex::lock_guard io_guard (&io_cm_);
503504 auto [rec, rn] = co_await s_.read_some (rbuf);
504505 if (rec)
505506 {
@@ -526,12 +527,13 @@ struct wolfssl_stream::impl
526527 // Renegotiation
527528 if (read_out_len_ > 0 )
528529 {
529- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
530+ auto [lec] = co_await io_cm_.lock ();
530531 if (lec)
531532 {
532533 current_op_ = nullptr ;
533534 co_return {lec, total_read};
534535 }
536+ capy::async_mutex::lock_guard io_guard (&io_cm_);
535537 auto [wec, wn] = co_await capy::write (
536538 s_,
537539 capy::const_buffer (
@@ -604,12 +606,13 @@ struct wolfssl_stream::impl
604606 // Flush any pending output
605607 if (write_out_len_ > 0 )
606608 {
607- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
609+ auto [lec] = co_await io_cm_.lock ();
608610 if (lec)
609611 {
610612 current_op_ = nullptr ;
611613 co_return {lec, total_written};
612614 }
615+ capy::async_mutex::lock_guard io_guard (&io_cm_);
613616 auto [wec, wn] = co_await capy::write (
614617 s_,
615618 capy::const_buffer (
@@ -633,12 +636,13 @@ struct wolfssl_stream::impl
633636 {
634637 if (write_out_len_ > 0 )
635638 {
636- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
639+ auto [lec] = co_await io_cm_.lock ();
637640 if (lec)
638641 {
639642 current_op_ = nullptr ;
640643 co_return {lec, total_written};
641644 }
645+ capy::async_mutex::lock_guard io_guard (&io_cm_);
642646 auto [wec, wn] = co_await capy::write (
643647 s_,
644648 capy::const_buffer (
@@ -662,12 +666,13 @@ struct wolfssl_stream::impl
662666 capy::mutable_buffer rbuf (
663667 write_in_buf_.data () + write_in_len_,
664668 write_in_buf_.size () - write_in_len_);
665- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
669+ auto [lec] = co_await io_cm_.lock ();
666670 if (lec)
667671 {
668672 current_op_ = nullptr ;
669673 co_return {lec, total_written};
670674 }
675+ capy::async_mutex::lock_guard io_guard (&io_cm_);
671676 auto [rec, rn] = co_await s_.read_some (rbuf);
672677 if (rec)
673678 {
@@ -729,12 +734,13 @@ struct wolfssl_stream::impl
729734 // Flush any remaining output
730735 if (read_out_len_ > 0 )
731736 {
732- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
737+ auto [lec] = co_await io_cm_.lock ();
733738 if (lec)
734739 {
735740 ec = lec;
736741 break ;
737742 }
743+ capy::async_mutex::lock_guard io_guard (&io_cm_);
738744 auto [wec, wn] = co_await capy::write (
739745 s_,
740746 capy::const_buffer (
@@ -754,12 +760,13 @@ struct wolfssl_stream::impl
754760 // Must flush (e.g. ClientHello) before reading ServerHello
755761 if (read_out_len_ > 0 )
756762 {
757- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
763+ auto [lec] = co_await io_cm_.lock ();
758764 if (lec)
759765 {
760766 ec = lec;
761767 break ;
762768 }
769+ capy::async_mutex::lock_guard io_guard (&io_cm_);
763770 auto [wec, wn] = co_await capy::write (
764771 s_,
765772 capy::const_buffer (
@@ -780,12 +787,13 @@ struct wolfssl_stream::impl
780787 capy::mutable_buffer rbuf (
781788 read_in_buf_.data () + read_in_len_,
782789 read_in_buf_.size () - read_in_len_);
783- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
790+ auto [lec] = co_await io_cm_.lock ();
784791 if (lec)
785792 {
786793 ec = lec;
787794 break ;
788795 }
796+ capy::async_mutex::lock_guard io_guard (&io_cm_);
789797 auto [rec, rn] = co_await s_.read_some (rbuf);
790798 if (rec)
791799 {
@@ -798,12 +806,13 @@ struct wolfssl_stream::impl
798806 {
799807 if (read_out_len_ > 0 )
800808 {
801- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
809+ auto [lec] = co_await io_cm_.lock ();
802810 if (lec)
803811 {
804812 ec = lec;
805813 break ;
806814 }
815+ capy::async_mutex::lock_guard io_guard (&io_cm_);
807816 auto [wec, wn] = co_await capy::write (
808817 s_,
809818 capy::const_buffer (
@@ -853,12 +862,13 @@ struct wolfssl_stream::impl
853862 // Bidirectional shutdown complete - flush any remaining output
854863 if (read_out_len_ > 0 )
855864 {
856- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
865+ auto [lec] = co_await io_cm_.lock ();
857866 if (lec)
858867 {
859868 ec = lec;
860869 break ;
861870 }
871+ capy::async_mutex::lock_guard io_guard (&io_cm_);
862872 auto [wec, wn] = co_await capy::write (
863873 s_,
864874 capy::const_buffer (
@@ -874,9 +884,13 @@ struct wolfssl_stream::impl
874884 // First, flush any pending output (sends our close_notify)
875885 if (read_out_len_ > 0 )
876886 {
877- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
887+ auto [lec] = co_await io_cm_.lock ();
878888 if (lec)
889+ {
890+ ec = lec;
879891 break ;
892+ }
893+ capy::async_mutex::lock_guard io_guard (&io_cm_);
880894 auto [wec, wn] = co_await capy::write (
881895 s_,
882896 capy::const_buffer (
@@ -897,9 +911,13 @@ struct wolfssl_stream::impl
897911 capy::mutable_buffer rbuf (
898912 read_in_buf_.data () + read_in_len_,
899913 read_in_buf_.size () - read_in_len_);
900- auto [lec, guard ] = co_await io_cm_.scoped_lock ();
914+ auto [lec] = co_await io_cm_.lock ();
901915 if (lec)
916+ {
917+ ec = lec;
902918 break ;
919+ }
920+ capy::async_mutex::lock_guard io_guard (&io_cm_);
903921 auto [rec, rn] = co_await s_.read_some (rbuf);
904922 if (rec)
905923 break ; // EOF or socket error during shutdown read - acceptable
0 commit comments