diff --git a/sys/kern/kern_hazard_pointer.pas b/sys/kern/kern_hazard_pointer.pas index 154a709b..d82a0099 100644 --- a/sys/kern/kern_hazard_pointer.pas +++ b/sys/kern/kern_hazard_pointer.pas @@ -99,6 +99,8 @@ type t_scan_mode=(smLazy,smLazyOne,smForce); function Scan(mode:t_scan_mode):Pointer; +label + _again; var p_set :TPointerSet; p_node:p_pointer_node; @@ -109,6 +111,8 @@ var begin Result:=nil; + _again: + r_node:=LIST_FIRST(@rlist); if (r_node=nil) then Exit; @@ -183,6 +187,12 @@ begin // p_node:=p_set.Min; end; + + if (mode=smForce) and + (LIST_FIRST(@rlist)<>nil) then + begin + goto _again; + end; end; Procedure Retire(P:Pointer;FuncFree:TGuard.TFuncFree);