Browse Source

Use InterlockedExchangeAdd to get ConnectionCount

Ondrej Pokorny 4 years ago
parent
commit
964a9839d1
1 changed files with 7 additions and 1 deletions
  1. 7 1
      packages/fcl-web/src/base/fphttpserver.pp

+ 7 - 1
packages/fcl-web/src/base/fphttpserver.pp

@@ -139,6 +139,7 @@ Type
     FUseSSL: Boolean;
     FUseSSL: Boolean;
     procedure DoCreateClientHandler(Sender: TObject; out AHandler: TSocketHandler);
     procedure DoCreateClientHandler(Sender: TObject; out AHandler: TSocketHandler);
     function GetActive: Boolean;
     function GetActive: Boolean;
+    function GetConnectionCount: Integer;
     function GetHostName: string;
     function GetHostName: string;
     procedure SetAcceptIdleTimeout(AValue: Cardinal);
     procedure SetAcceptIdleTimeout(AValue: Cardinal);
     procedure SetActive(const AValue: Boolean);
     procedure SetActive(const AValue: Boolean);
@@ -188,7 +189,7 @@ Type
     // Called when a connection encounters an unexpected error. Will call OnRequestError when set.
     // Called when a connection encounters an unexpected error. Will call OnRequestError when set.
     procedure HandleRequestError(Sender: TObject; E: Exception); virtual;
     procedure HandleRequestError(Sender: TObject; E: Exception); virtual;
     // Connection count
     // Connection count
-    Property ConnectionCount : Integer Read FConnectionCount;
+    Property ConnectionCount : Integer Read GetConnectionCount;
   public
   public
     Constructor Create(AOwner : TComponent); override;
     Constructor Create(AOwner : TComponent); override;
     Destructor Destroy; override;
     Destructor Destroy; override;
@@ -684,6 +685,11 @@ begin
     Result:=Assigned(FServer);
     Result:=Assigned(FServer);
 end;
 end;
 
 
+function TFPCustomHttpServer.GetConnectionCount: Integer;
+begin
+  Result := InterlockedExchangeAdd(FConnectionCount, 0);
+end;
+
 procedure TFPCustomHttpServer.DoCreateClientHandler(Sender: TObject; out AHandler: TSocketHandler);
 procedure TFPCustomHttpServer.DoCreateClientHandler(Sender: TObject; out AHandler: TSocketHandler);
 begin
 begin
   AHandler:=GetSocketHandler(UseSSL);
   AHandler:=GetSocketHandler(UseSSL);