@@ -86,6 +86,7 @@ public abstract class ModelBase : IFullModel
86
86
private BasicRecoverOkEventHandler m_basicRecoverOk ;
87
87
88
88
public ManualResetEvent m_flowControlBlock = new ManualResetEvent ( true ) ;
89
+ private readonly object m_flowSendLock = new object ( ) ;
89
90
90
91
public event ModelShutdownEventHandler ModelShutdown
91
92
{
@@ -417,10 +418,18 @@ public bool IsOpen
417
418
418
419
public void ModelSend ( MethodBase method , ContentHeaderBase header , byte [ ] body )
419
420
{
420
- if ( method . HasContent ) {
421
- m_flowControlBlock . WaitOne ( ) ;
421
+ if ( method . HasContent )
422
+ {
423
+ lock ( m_flowSendLock )
424
+ {
425
+ m_flowControlBlock . WaitOne ( ) ;
426
+ m_session . Transmit ( new Command ( method , header , body ) ) ;
427
+ }
428
+ }
429
+ else
430
+ {
431
+ m_session . Transmit ( new Command ( method , header , body ) ) ;
422
432
}
423
- m_session . Transmit ( new Command ( method , header , body ) ) ;
424
433
}
425
434
426
435
public MethodBase ModelRpc ( MethodBase method , ContentHeaderBase header , byte [ ] body )
@@ -495,10 +504,18 @@ public void HandleBasicReturn(ushort replyCode,
495
504
public void HandleChannelFlow ( bool active )
496
505
{
497
506
if ( active )
507
+ {
498
508
m_flowControlBlock . Set ( ) ;
509
+ _Private_ChannelFlowOk ( active ) ;
510
+ }
499
511
else
500
- m_flowControlBlock . Reset ( ) ;
501
- _Private_ChannelFlowOk ( active ) ;
512
+ {
513
+ lock ( m_flowSendLock )
514
+ {
515
+ m_flowControlBlock . Reset ( ) ;
516
+ _Private_ChannelFlowOk ( active ) ;
517
+ }
518
+ }
502
519
OnFlowControl ( new FlowControlEventArgs ( active ) ) ;
503
520
}
504
521
0 commit comments