diff options
Diffstat (limited to 'rtl/objpas/classes/reader.inc')
-rw-r--r-- | rtl/objpas/classes/reader.inc | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/rtl/objpas/classes/reader.inc b/rtl/objpas/classes/reader.inc index cc99a8f299..1a37021a64 100644 --- a/rtl/objpas/classes/reader.inc +++ b/rtl/objpas/classes/reader.inc @@ -609,14 +609,34 @@ begin If (Stream=Nil) then Raise EReadError.Create(SEmptyStreamIllegalReader); FDriver := CreateDriver(Stream, BufSize); +{$ifdef FPC_HAS_FEATURE_THREADING} + InitCriticalSection(FLock); +{$ENDIF} end; destructor TReader.Destroy; begin +{$ifdef FPC_HAS_FEATURE_THREADING} + DoneCriticalSection(FLock); +{$ENDIF} FDriver.Free; inherited Destroy; end; +procedure TReader.Lock; +begin +{$ifdef FPC_HAS_FEATURE_THREADING} + EnterCriticalSection(FLock); +{$ENDIF} +end; + +procedure TReader.Unlock; +begin +{$ifdef FPC_HAS_FEATURE_THREADING} + LeaveCriticalSection(FLock); +{$ENDIF} +end; + procedure TReader.FlushBuffer; begin Driver.FlushBuffer; @@ -1476,12 +1496,17 @@ begin { Don't use Result.Name directly, as this would influence FindGlobalComponent in successive loop runs } ResultName := CompName; - while Assigned(FindGlobalComponent(ResultName)) do - begin - Inc(i); - ResultName := CompName + '_' + IntToStr(i); + Lock; + try + while Assigned(FindGlobalComponent(ResultName)) do + begin + Inc(i); + ResultName := CompName + '_' + IntToStr(i); + end; + Result.Name := ResultName; + finally + Unlock; end; - Result.Name := ResultName; end; end; |