anchor.diff:    Result := tick_diff(FWorkerStartTick, GetTickCount);  
   end;
   
  +procedure TIocpClientContext.DecRecvRef;
  +var
  +  j:Integer;
  +begin
  +  j := InterlockedDecrement(FWSARecvRef);
  +  if j < 0 then
  +  begin
  +    Assert(false, 'error');
  +  end;
  +  if j = 0 then
  +  begin
  +    if (not FRequestDisconnect) then
  +    begin 
  +      PostWSARecvRequest;
  +    end;
  +  end;
  +end;
  +
   procedure TIocpClientContext.DoCleanUp;
   begin
     {$IFDEF DIOCP_DEBUG}
  -  CheckThreadIn;
  +  CheckThreadIn('DoCleanUp');
     try
     {$ENDIF}
       FLastActivity := 0;
       FRequestClose := 0;
   
  +    FWSARecvRef := 0;
  +
       FOwner := nil;
       FRequestDisconnect := false;
  -    FManulPostWSARecvRequest := false;
       FSending := false;
   
       FWorkerEndTick := 0;
  
positive.code:     finally
        lvDebugInfo := FDebugInfo;
  
        // PostWSARecv before decReferenceCounter
        if (not FClientContext.FManulPostWSARecvRequest) and (not FClientContext.FRequestDisconnect) then
        begin                                   
          FClientContext.PostWSARecvRequest;
        end;
  
        // response done Dec
        // may return to pool
  
negative.code:   Result := FOwner.GetSendRequest;
    Assert(Result <> nil);
    Result.FClientContext := self;
  end;
  
  procedure TIocpClientContext.IncRecvRef;
  var
    j:Integer;
  begin
    j := InterlockedIncrement(FWSARecvRef);
    Assert(j > 0, 'error IncRecvRef');
  end;
  
  
  