AContext.data can be nil?
        Posted  
        
            by 
                waza123
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by waza123
        
        
        
        Published on 2012-11-26T03:09:23Z
        Indexed on 
            2012/11/29
            17:04 UTC
        
        
        Read the original article
        Hit count: 479
        
In this code, as you see on Connect, AContext.Data is filled with something
TmyTThreadList = class(TThreadList)
  id: integer;
end;
var unique_id:integer;
procedure TfrmTestIdTCPServer.IdTCPServerConnect(AContext: TIdContext);
 begin
  CS.Enter;
  try
    inc(unique_id);
  finally
    CS.Leave;
  end;
   AContext.Data := myTThreadList.Create;
   list := myTThreadList(AContext.Data).LockList;
   try
     myTThreadList(AContext.Data).id := my_unique_id;
     list.Add(myTThreadList(AContext.Data));
   finally
     myTThreadList(AContext.Data).UnlockList;
   end;
 end;
then on disconnect, coder is checking here for Acontext.Data <> nil
procedure TfrmTestIdTCPServer.IdTCPServerDisconnect(AContext: TIdContext);
 var
 begin
   if AContext.Data <> nil then
   begin
The question is, why he is checking for nil ?
Thanks.
EDIT:
I'm asking this, because when I do the same, onExecute I access AContext.Data , and sometimes (when in same time is connecting many clients) AContext.Data is empty, access violation appears.
© Stack Overflow or respective owner