@@ -85,6 +85,7 @@ public abstract class ModelBase : IFullModel
85
85
private BasicRecoverOkEventHandler m_basicRecoverOk ;
86
86
87
87
public ManualResetEvent m_flowControlBlock = new ManualResetEvent ( true ) ;
88
+ private readonly object m_flowSendLock = new object ( ) ;
88
89
89
90
public event ModelShutdownEventHandler ModelShutdown
90
91
{
@@ -373,10 +374,18 @@ public bool IsOpen
373
374
374
375
public void ModelSend ( MethodBase method , ContentHeaderBase header , byte [ ] body )
375
376
{
376
- if ( method . HasContent ) {
377
- m_flowControlBlock . WaitOne ( ) ;
377
+ if ( method . HasContent )
378
+ {
379
+ lock ( m_flowSendLock )
380
+ {
381
+ m_flowControlBlock . WaitOne ( ) ;
382
+ m_session . Transmit ( new Command ( method , header , body ) ) ;
383
+ }
384
+ }
385
+ else
386
+ {
387
+ m_session . Transmit ( new Command ( method , header , body ) ) ;
378
388
}
379
- m_session . Transmit ( new Command ( method , header , body ) ) ;
380
389
}
381
390
382
391
public MethodBase ModelRpc ( MethodBase method , ContentHeaderBase header , byte [ ] body )
@@ -451,10 +460,18 @@ public void HandleBasicReturn(ushort replyCode,
451
460
public void HandleChannelFlow ( bool active )
452
461
{
453
462
if ( active )
463
+ {
454
464
m_flowControlBlock . Set ( ) ;
465
+ _Private_ChannelFlowOk ( active ) ;
466
+ }
455
467
else
456
- m_flowControlBlock . Reset ( ) ;
457
- _Private_ChannelFlowOk ( active ) ;
468
+ {
469
+ lock ( m_flowSendLock )
470
+ {
471
+ m_flowControlBlock . Reset ( ) ;
472
+ _Private_ChannelFlowOk ( active ) ;
473
+ }
474
+ }
458
475
}
459
476
460
477
public void HandleConnectionStart ( byte versionMajor ,
0 commit comments