Originally Posted by
Elphi
Die Delphi versie bestaat al een aantal jaren, en wordt ook in productie gebruikt. Ik vind het allemaal erg logisch, de Delphi implementatie dus...
Het feit dat het lang bestaat pleit meer ertegen dan ervoor. In de tijden voor D6 werd veel minder nauw op dit soort dingen gelet.
Begrijp me niet verkeerd, ik sluit niet uit dat er iets mis is in FPC, maar deze codebase heeft sowieso een reukje, en je kan er niet zonder meer vanuit gaan dat als het in Delphi werkt, dat het ook correct is. Zelfs als het al tig jaar "productie" draait.
Uit een eerdere test heb ik nog het volgende bewaard (in DIFF formaat)
Code:
--- FixedConnPool.old Wed Jun 29 16:13:23 2011
+++ FixedConnPool.pas Wed Jun 29 16:13:07 2011
@@ -59,6 +59,7 @@
//CHANGE
//To use a connection of another type, change the
//return type of the Connection function
+ procedure SetSyncObjects(asemaphore:THandle;ACritSection:TCriticalSection);
function Connection: TIBConnection;
function GetRefCount: Integer;
function GetLastAccess: TDateTime;
@@ -153,6 +154,7 @@
{IConnection methods}
function GetLastAccess: TDateTime;
function GetRefCount: Integer;
+ procedure SetSyncObjects(asemaphore:THandle;ACritSection:TCriticalSection);
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
@@ -228,7 +230,6 @@
function TFixedConnectionPool.GetConnection: IConnection;
var
i: Integer;
- DM: TConnectionModule;
WaitResult: Integer;
begin
Result := nil;
@@ -248,10 +249,8 @@
//is referencing the object).
if FPool[i] = nil then
begin
- DM := TConnectionModule.Create(nil);
- DM.CriticalSection := Self.CriticalSection;
- DM.Semaphore := Self.Semaphore;
- FPool[i] := DM;
+ FPool[i] := TConnectionModule.Create(nil);
+ FPool[i].SetSyncObjects(Semaphore,CriticalSection);
FPool[i].Connection.Connected := True;
Result := FPool[i];
Exit;
En dan nog ff setsyncobjects implementeren. (doet niks anders dan parameters aan velden assignen)
Bookmarks