@@ -77,7 +77,9 @@ public class SocketFrameHandler : IFrameHandler
7777 private readonly ITcpClient m_socket ;
7878 private readonly NetworkBinaryWriter m_writer ;
7979 private readonly object _semaphore = new object ( ) ;
80+ private readonly object _sslLock = new object ( ) ;
8081 private bool _closed ;
82+ private bool _ssl = false ;
8183 public SocketFrameHandler ( AmqpTcpEndpoint endpoint ,
8284 Func < AddressFamily , ITcpClient > socketFactory ,
8385 int connectionTimeout , int readTimeout , int writeTimeout )
@@ -108,6 +110,7 @@ public SocketFrameHandler(AmqpTcpEndpoint endpoint,
108110 try
109111 {
110112 netstream = SslHelper . TcpUpgrade ( netstream , endpoint . Ssl ) ;
113+ _ssl = true ;
111114 }
112115 catch ( Exception )
113116 {
@@ -217,7 +220,7 @@ public void SendHeader()
217220 nbw . Write ( ( byte ) Endpoint . Protocol . MajorVersion ) ;
218221 nbw . Write ( ( byte ) Endpoint . Protocol . MinorVersion ) ;
219222 }
220- m_writer . Write ( ms . ToArray ( ) ) ;
223+ Write ( ms . ToArray ( ) ) ;
221224 }
222225
223226 public void WriteFrame ( OutboundFrame frame )
@@ -226,7 +229,7 @@ public void WriteFrame(OutboundFrame frame)
226229 var nbw = new NetworkBinaryWriter ( ms ) ;
227230 frame . WriteTo ( nbw ) ;
228231 m_socket . Client . Poll ( m_writeableStateTimeout , SelectMode . SelectWrite ) ;
229- m_writer . Write ( ms . ToArray ( ) ) ;
232+ Write ( ms . ToArray ( ) ) ;
230233 }
231234
232235 public void WriteFrameSet ( IList < OutboundFrame > frames )
@@ -235,7 +238,22 @@ public void WriteFrameSet(IList<OutboundFrame> frames)
235238 var nbw = new NetworkBinaryWriter ( ms ) ;
236239 foreach ( var f in frames ) f . WriteTo ( nbw ) ;
237240 m_socket . Client . Poll ( m_writeableStateTimeout , SelectMode . SelectWrite ) ;
238- m_writer . Write ( ms . ToArray ( ) ) ;
241+ Write ( ms . ToArray ( ) ) ;
242+ }
243+
244+ private void Write ( byte [ ] buffer )
245+ {
246+ if ( _ssl )
247+ {
248+ lock ( _sslLock )
249+ {
250+ m_writer . Write ( buffer ) ;
251+ }
252+ }
253+ else
254+ {
255+ m_writer . Write ( buffer ) ;
256+ }
239257 }
240258
241259 private bool ShouldTryIPv6 ( AmqpTcpEndpoint endpoint )
0 commit comments