diff options
author | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2005-05-19 21:14:45 +0000 |
---|---|---|
committer | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2005-05-19 21:14:45 +0000 |
commit | 15013f3c580b4bf44204fe31e9f9a9687b51e3b1 (patch) | |
tree | 2782331d8266dbdb02c74fb4f2456f1f1c22ff77 /rtl/openbsd | |
parent | 36917010ad86a5424f9d676f5fcb493e4182c5ed (diff) | |
download | fpc-15013f3c580b4bf44204fe31e9f9a9687b51e3b1.tar.gz |
+ Removed VER1_0 defines
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@33 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/openbsd')
-rw-r--r-- | rtl/openbsd/tthread.inc | 269 |
1 files changed, 0 insertions, 269 deletions
diff --git a/rtl/openbsd/tthread.inc b/rtl/openbsd/tthread.inc index e54f45c0a1..a22e97496d 100644 --- a/rtl/openbsd/tthread.inc +++ b/rtl/openbsd/tthread.inc @@ -15,274 +15,6 @@ } -{$IFDEF VER1_0} // leaving the old implementation in for now... -type - PThreadRec=^TThreadRec; - TThreadRec=record - thread : TThread; - next : PThreadRec; - end; - -var - ThreadRoot : PThreadRec; - ThreadsInited : boolean; -// MainThreadID: longint; - -Const - ThreadCount: longint = 0; - -function ThreadSelf:TThread; -var - hp : PThreadRec; - sp : Pointer; -begin - sp:=SPtr; - hp:=ThreadRoot; - while assigned(hp) do - begin - if (sp<=hp^.Thread.FStackPointer) and - (sp>(hp^.Thread.FStackPointer-hp^.Thread.FStackSize)) then - begin - Result:=hp^.Thread; - exit; - end; - hp:=hp^.next; - end; - Result:=nil; -end; - - -//function SIGCHLDHandler(Sig: longint): longint; cdecl;//this is std linux C declaration as function -procedure SIGCHLDHandler(Sig: longint); cdecl; - -begin - fpwaitpid(-1, nil, WNOHANG); -end; - -procedure InitThreads; -var - Act, OldAct: Baseunix.PSigActionRec; -begin - ThreadRoot:=nil; - ThreadsInited:=true; - - -// This will install SIGCHLD signal handler -// signal() installs "one-shot" handler, -// so it is better to install and set up handler with sigaction() - - GetMem(Act, SizeOf(SigActionRec)); - GetMem(OldAct, SizeOf(SigActionRec)); - - Act^.sa_handler := TSigAction(@SIGCHLDHandler); - Act^.sa_flags := SA_NOCLDSTOP {or SA_NOMASK or SA_RESTART}; - Fillchar(Act^.sa_mask,sizeof(Act^.sa_mask),0); //Do not block all signals ??. Don't need if SA_NOMASK in flags - FpSigAction(SIGCHLD, Act, OldAct); - - FreeMem(Act, SizeOf(SigActionRec)); - FreeMem(OldAct, SizeOf(SigActionRec)); -end; - - -procedure DoneThreads; -var - hp : PThreadRec; -begin - while assigned(ThreadRoot) do - begin - ThreadRoot^.Thread.Destroy; - hp:=ThreadRoot; - ThreadRoot:=ThreadRoot^.Next; - dispose(hp); - end; - ThreadsInited:=false; -end; - - -procedure AddThread(t:TThread); -var - hp : PThreadRec; -begin - { Need to initialize threads ? } - if not ThreadsInited then - InitThreads; - - { Put thread in the linked list } - new(hp); - hp^.Thread:=t; - hp^.next:=ThreadRoot; - ThreadRoot:=hp; - - inc(ThreadCount, 1); -end; - - -procedure RemoveThread(t:TThread); -var - lasthp,hp : PThreadRec; -begin - hp:=ThreadRoot; - lasthp:=nil; - while assigned(hp) do - begin - if hp^.Thread=t then - begin - if assigned(lasthp) then - lasthp^.next:=hp^.next - else - ThreadRoot:=hp^.next; - dispose(hp); - exit; - end; - lasthp:=hp; - hp:=hp^.next; - end; - - Dec(ThreadCount, 1); - if ThreadCount = 0 then DoneThreads; -end; - - -{ TThread } -function ThreadProc(args:pointer): Integer;cdecl; -var - FreeThread: Boolean; - Thread : TThread absolute args; -begin - while Thread.FHandle = 0 do fpsleep(1); - if Thread.FSuspended then Thread.suspend(); - try - Thread.Execute; - except - Thread.FFatalException := TObject(AcquireExceptionObject); - end; - FreeThread := Thread.FFreeOnTerminate; - Result := Thread.FReturnValue; - Thread.FFinished := True; - Thread.DoTerminate; - if FreeThread then - Thread.Free; - fpexit(Result); -end; - - -constructor TThread.Create(CreateSuspended: Boolean); -var - Flags: Integer; -begin - inherited Create; - AddThread(self); - FSuspended := CreateSuspended; - Flags := CLONE_VM + CLONE_FS + CLONE_FILES + CLONE_SIGHAND + SIGCHLD; - { Setup 16k of stack } - FStackSize:=16384; - Getmem(FStackPointer,FStackSize); - inc(FStackPointer,FStackSize); - FCallExitProcess:=false; - { Clone } - FHandle:= Clone(@ThreadProc,FStackPointer,Flags,self); -// if FSuspended then Suspend; - FThreadID := FHandle; - IsMultiThread := TRUE; - FFatalException := nil; -end; - - -destructor TThread.Destroy; -begin - if not FFinished and not Suspended then - begin - Terminate; - WaitFor; - end; - if FHandle <> -1 then - fpkill(FHandle, SIGKILL); - dec(FStackPointer,FStackSize); - Freemem(FStackPointer); - FFatalException.Free; - FFatalException := nil; - inherited Destroy; - RemoveThread(self); -end; - - -procedure TThread.CallOnTerminate; -begin - FOnTerminate(Self); -end; - -procedure TThread.DoTerminate; -begin - if Assigned(FOnTerminate) then - Synchronize(@CallOnTerminate); -end; - - -const -{ I Don't know idle or timecritical, value is also 20, so the largest other - possibility is 19 (PFV) } - Priorities: array [TThreadPriority] of Integer = - (-20,-19,-10,9,10,19,20); - -function TThread.GetPriority: TThreadPriority; -var - P: Integer; - I: TThreadPriority; -begin - P := fpGetPriority(Prio_Process,FHandle); - Result := tpNormal; - for I := Low(TThreadPriority) to High(TThreadPriority) do - if Priorities[I] = P then - Result := I; -end; - - -procedure TThread.SetPriority(Value: TThreadPriority); -begin - fpSetPriority(Prio_Process,FHandle,Priorities[Value]); -end; - - -procedure TThread.SetSuspended(Value: Boolean); -begin - if Value <> FSuspended then - if Value then - Suspend - else - Resume; -end; - - -procedure TThread.Suspend; -begin - FSuspended := true; - fpKill(FHandle, SIGSTOP); -end; - - -procedure TThread.Resume; -begin - fpKill(FHandle, SIGCONT); - FSuspended := False; -end; - - -procedure TThread.Terminate; -begin - FTerminated := True; -end; - -function TThread.WaitFor: Integer; -var - status : longint; -begin - if FThreadID = MainThreadID then - fpwaitpid(0,@status,0) - else - fpwaitpid(FHandle,@status,0); - Result:=status; -end; -{$ELSE} { What follows, is a short description on my implementation of TThread. @@ -580,7 +312,6 @@ procedure TThread.SetPriority(Value: TThreadPriority); begin ThreadSetPriority(FHandle, Priorities[Value]); end; -{$ENDIF} { $Log: tthread.inc,v $ |