* use initc.fpgetCerrno rather than fpgeterrno to get the errno

results of the sem_* routines (since those always come from libc/
    libpthread)

git-svn-id: trunk@8266 -
This commit is contained in:
Jonas Maebe 2007-08-12 08:29:48 +00:00
parent 4457538435
commit 123362235b

View File

@ -54,7 +54,8 @@ implementation
Uses Uses
BaseUnix, BaseUnix,
unix, unix,
unixtype unixtype,
initc
{$ifdef dynpthreads} {$ifdef dynpthreads}
,dl ,dl
{$endif} {$endif}
@ -433,7 +434,7 @@ begin
{$if defined(has_sem_init) or defined(has_sem_open)} {$if defined(has_sem_init) or defined(has_sem_open)}
repeat repeat
res:=sem_wait(PSemaphore(FSem)); res:=sem_wait(PSemaphore(FSem));
err:=fpgeterrno; err:=fpgetCerrno;
until (res<>-1) or (err<>ESysEINTR); until (res<>-1) or (err<>ESysEINTR);
{$else} {$else}
repeat repeat
@ -472,7 +473,7 @@ var
begin begin
repeat repeat
res:=sem_trywait(FSem); res:=sem_trywait(FSem);
err:=fpgeterrno; err:=fpgetCerrno;
until (res<>-1) or (err<>ESysEINTR); until (res<>-1) or (err<>ESysEINTR);
if (res=0) then if (res=0) then
result:=tw_semwasunlocked result:=tw_semwasunlocked
@ -515,7 +516,7 @@ var
begin begin
repeat repeat
cIntSemaphoreOpen := sem_open(name,O_CREAT,0,ord(initvalue)); cIntSemaphoreOpen := sem_open(name,O_CREAT,0,ord(initvalue));
err:=fpgeterrno; err:=fpgetCerrno;
until (ptrint(cIntSemaphoreOpen) <> SEM_FAILED) or (err <> ESysEINTR); until (ptrint(cIntSemaphoreOpen) <> SEM_FAILED) or (err <> ESysEINTR);
if (ptrint(cIntSemaphoreOpen) <> SEM_FAILED) then if (ptrint(cIntSemaphoreOpen) <> SEM_FAILED) then
{ immediately unlink so the semaphore will be destroyed when the } { immediately unlink so the semaphore will be destroyed when the }
@ -718,12 +719,12 @@ begin
if Value=0 then if Value=0 then
cSemaphorePost(plocaleventstate(state)^.FSem); cSemaphorePost(plocaleventstate(state)^.FSem);
end end
else if (fpgeterrno = ESysENOSYS) then else if (fpgetCerrno = ESysENOSYS) then
{ not yet implemented on Mac OS X 10.4.8 } { not yet implemented on Mac OS X 10.4.8 }
begin begin
repeat repeat
res:=sem_trywait(psem_t(plocaleventstate(state)^.FSem)); res:=sem_trywait(psem_t(plocaleventstate(state)^.FSem));
err:=fpgeterrno; err:=fpgetCerrno;
until ((res<>-1) or (err<>ESysEINTR)); until ((res<>-1) or (err<>ESysEINTR));
{ now we've either decreased the semaphore by 1 (if it was } { now we've either decreased the semaphore by 1 (if it was }
{ not zero), or we've done nothing (if it was already zero) } { not zero), or we've done nothing (if it was already zero) }