[fpc-devel] Why FreeBSD sem_init() works different to Linux?

Sven Barth pascaldragon at googlemail.com
Mon Feb 4 13:22:41 CET 2013


Am 04.02.2013 12:47, schrieb Graeme Geldenhuys:
> Hi,
>
> I found another problem with Semaphores between FreeBSD and Linux.
>
> Attached is my test project. Again, it is similar code used in tiOPF.
>
> For some reason under FreeBSD, it *always* zeros the variable that holds
> the Max Pool Size value passed in to sem_init()'s third parameter. This
> means that if I try and us that variable anywhere after the sem_init()
> call, like when I want to destroy the semaphore, I can't because the
> variable now holds the value 0.
>
[snip]
> Any idea why FreeBSD does this? A bug in FPC+FreeBSD?

I have an idea. But for this I'd need some confirmation: Can you please 
put in your example program the FSemaphore into a record and add also a 
field of type "array[0..1] of LongInt" to that record and try that 
again? (of course you'll need to adjust the call to sem_init to use the 
field in the record). Additionally it would be nice if you write some 
"well defined garbage" into the added array (e.g. $12345678 and 
$87654321) and then output the content of the two values after the 
sem_init call? [and yes, I'm thinking in the context of memory 
corruption here]

Regards,
Sven



More information about the fpc-devel mailing list