mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 14:31:38 +01:00 
			
		
		
		
	* 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:
		
							parent
							
								
									4457538435
								
							
						
					
					
						commit
						123362235b
					
				| @ -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) } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jonas Maebe
						Jonas Maebe