From 99393e0e191858edc84f5c8fa6a1bb78cc4533ba Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Thu, 10 Nov 2022 15:31:42 +0300 Subject: [PATCH] + --- kernel/ps4_event_flag.pas | 30 ++++++++++++++++-------------- kernel/ps4_sema.pas | 22 ++++++++++++---------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/kernel/ps4_event_flag.pas b/kernel/ps4_event_flag.pas index dbefa50..d10aa9a 100644 --- a/kernel/ps4_event_flag.pas +++ b/kernel/ps4_event_flag.pas @@ -333,21 +333,23 @@ begin Result:=0; repeat - if (node.ret<>1) then //is signaled - begin - if (pResultPat<>nil) then - begin - pResultPat^:=node.ResultPat; - end; - Result:=node.ret; - Break; - end else - if (Result=EINTR) then - begin - Break; - end; - spin_lock(ef^.lock_list); + if (node.ret<>1) then //is signaled + begin + if (pResultPat<>nil) then + begin + pResultPat^:=node.ResultPat; + end; + Result:=node.ret; + spin_unlock(ef^.lock_list); + Break; + end else + if (Result=EINTR) then + begin + spin_unlock(ef^.lock_list); + Break; + end; + if _test_and_set(ef,bitPattern,waitMode,pResultPat) then begin store_seq_cst(node.ret,0); diff --git a/kernel/ps4_sema.pas b/kernel/ps4_sema.pas index 510886e..9f98f9d 100644 --- a/kernel/ps4_sema.pas +++ b/kernel/ps4_sema.pas @@ -418,17 +418,19 @@ begin repeat - if (node.ret<>1) then //is signaled - begin - Result:=node.ret; - Break; - end else - if (Result=EINTR) then - begin - Break; - end; - spin_lock(sv^.vlock); + if (node.ret<>1) then //is signaled + begin + Result:=node.ret; + spin_unlock(sv^.vlock); + Break; + end else + if (Result=EINTR) then + begin + spin_unlock(sv^.vlock); + Break; + end; + if (sv^.value>=count) then begin Dec(sv^.value,count);