mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
0b8bc3396d
commit
7b2c63eb9e
|
@ -342,6 +342,7 @@ var
|
|||
pattern:QWORD;
|
||||
attr:DWORD;
|
||||
_pri:Integer;
|
||||
count:Integer;
|
||||
begin
|
||||
td:=curkthread;
|
||||
|
||||
|
@ -392,7 +393,7 @@ begin
|
|||
if ((attr and EVF_ATTR_TH_FIFO)=0) then
|
||||
begin
|
||||
//PRIO
|
||||
node.entry.tqe_next:=TAILQ_FIRST(@evf^.list);
|
||||
node.entry.tqe_next:=@evf^.list.tqh_first;
|
||||
repeat
|
||||
node.entry.tqe_next:=p_evf_node(node.entry.tqe_next)^.entry.tqe_next;
|
||||
if (node.entry.tqe_next=nil) then goto _FIFO;
|
||||
|
@ -461,10 +462,10 @@ begin
|
|||
end;
|
||||
_SIGNAL:
|
||||
|
||||
Result:=evf^.wait_count-1;
|
||||
evf^.wait_count:=Result;
|
||||
count:=evf^.wait_count-1;
|
||||
evf^.wait_count:=count;
|
||||
|
||||
if ((evf^.attr and EVF_ATTR_DELF)<>0) and (Result=0) then
|
||||
if ((evf^.attr and EVF_ATTR_DELF)<>0) and (count=0) then
|
||||
begin
|
||||
cv_signal(@evf^.cv);
|
||||
end;
|
||||
|
@ -514,7 +515,6 @@ begin
|
|||
|
||||
Exit(EACCES);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
//
|
||||
|
|
|
@ -244,7 +244,7 @@ end;
|
|||
|
||||
function osem_wait(sem:p_osem;needCount:Integer;timeout:PDWORD):Integer;
|
||||
label
|
||||
_FIFO,_LAB;
|
||||
_FIFO,_SIGNAL;
|
||||
var
|
||||
td:p_kthread;
|
||||
node:t_osem_node;
|
||||
|
@ -309,10 +309,7 @@ begin
|
|||
timeout^:=0;
|
||||
end;
|
||||
end;
|
||||
if (Result=0) then
|
||||
begin
|
||||
//
|
||||
end else
|
||||
if (Result<>0) then
|
||||
begin
|
||||
node2:=sem^.list.tqh_first;
|
||||
repeat
|
||||
|
@ -320,7 +317,7 @@ begin
|
|||
if (node3=nil) then
|
||||
begin
|
||||
Result:=0;
|
||||
goto _LAB;
|
||||
goto _SIGNAL;
|
||||
end;
|
||||
node2:=node3^.entry.tqe_next;
|
||||
until (node3=@node);
|
||||
|
@ -339,7 +336,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
_LAB:
|
||||
_SIGNAL:
|
||||
count:=sem^.wait_count-1;
|
||||
sem^.wait_count:=count;
|
||||
if ((sem^.attr and SEMA_ATTR_DELF)<>0) then
|
||||
|
|
|
@ -41,7 +41,8 @@ var
|
|||
|
||||
event:Thandle;
|
||||
|
||||
osem:Integer;
|
||||
//osem:Integer;
|
||||
evf:Integer;
|
||||
|
||||
procedure trap_test;
|
||||
var
|
||||
|
@ -191,8 +192,11 @@ begin
|
|||
begin
|
||||
tid2:=curkthread^.td_tid;
|
||||
|
||||
osem:=osem_create('osem test',1,1,10);
|
||||
Writeln('osem=',osem,' _errno:',__error^);
|
||||
evf:=evf_create('evf test',EVF_ATTR_TH_PRIO,0);
|
||||
Writeln('evf=',evf,' _errno:',__error^);
|
||||
|
||||
//osem:=osem_create('osem test',1,1,10);
|
||||
//Writeln('osem=',osem,' _errno:',__error^);
|
||||
|
||||
act:=Default(sigaction_t);
|
||||
act.u.sa_handler:=sa_handler(@__ex_handler);
|
||||
|
@ -203,15 +207,21 @@ begin
|
|||
thr_kill(tid,SIGUSR1);
|
||||
//thr_wake(tid);
|
||||
|
||||
i:=_osem_wait_err(osem,1,nil);
|
||||
Writeln('_osem_wait_err=',i,' _errno:',__error^);
|
||||
i:=_evf_wait_err(evf,1,EVF_WAITMODE_OR,nil,nil);
|
||||
Writeln('_evf_wait_err=',i,' _errno:',__error^);
|
||||
|
||||
t:=400;
|
||||
i:=_osem_wait_err(osem,1,nil);
|
||||
Writeln('_osem_wait_err=',i,' _errno:',__error^);
|
||||
i:=_evf_wait_err(evf,2,EVF_WAITMODE_OR,nil,nil);
|
||||
Writeln('_evf_wait_err=',i,' _errno:',__error^);
|
||||
|
||||
i:=_osem_delete_err(osem);
|
||||
Writeln('_osem_delete_err=',i,' _errno:',__error^);
|
||||
//i:=_osem_wait_err(osem,1,nil);
|
||||
//Writeln('_osem_wait_err=',i,' _errno:',__error^);
|
||||
//
|
||||
//t:=400;
|
||||
//i:=_osem_wait_err(osem,1,nil);
|
||||
//Writeln('_osem_wait_err=',i,' _errno:',__error^);
|
||||
//
|
||||
//i:=_osem_delete_err(osem);
|
||||
//Writeln('_osem_delete_err=',i,' _errno:',__error^);
|
||||
|
||||
writeln;
|
||||
end else
|
||||
|
@ -256,7 +266,13 @@ begin
|
|||
sleep(500);
|
||||
//_osem_post_err(osem,1);
|
||||
thr_kill(tid2,SIGUSR1);
|
||||
_osem_post_err(osem,1);
|
||||
|
||||
i:=_evf_set_err(evf,2);
|
||||
|
||||
i:=_evf_set_err(evf,1);
|
||||
Writeln('_evf_set_err=',i,' _errno:',__error^);
|
||||
|
||||
//_osem_post_err(osem,1);
|
||||
|
||||
sig_lock;
|
||||
sig_lock;
|
||||
|
|
Loading…
Reference in New Issue