According to POSIX.1-2001 (through `man sem_init`) there are quite a few failure conditions for sem_init. Here is how they match up: 1. We pass 0 for pshared, the second param, so that can't be a problem. There is only room for problems if you pass nonzero and the OS doesn't support that. 2. It's possible that in the code being run, value is greater than SEM_VALUE_MAX. Check the OSX header files for the value of SEM_VALUE_MAX and make sure that PA isn't passing a value greater than what is supported. You may have to work around the limitations of OSX if it has a rather low SEM_VALUE_MAX. On Linux, sem_init is declared in /usr/include/semaphore.h, and SEM_VALUE_MAX is defined in /usr/include/bits/local_lim.h to be 2147483647. However, it appears that the current git PA does not ever pass a value greater than 0 when invoking sem_init. pa_semaphore_new just passes its parameter as the value, so we need to find all instances of pa_semaphore_new: run `grep -R pa_semaphore_new src` in the main directory of your pulseaudio trunk. On my machine, all instances of pa_semaphore_new pass a value of 0. So unless OSX doesn't support using a value of 0 (which would be very awkward), this isn't the problem. 3. The POSIX.1-2001 spec doesn't say what value sem_init should return on success. It's possible that OSX returns a nonzero success value, so the assertion is not valid for OSX. You might try a simple test program that calls sem_init, tries to use the semaphore, etc. and verifies that an integer value can indeed be passed between processes on OSX with a nonzero success value. In this case, hopefully the return value is not random, but is some predetermined value that you can #ifdef into the pa_semaphore_new code. 4. OSX pretends to support sem_init, but it really doesn't implement it correctly at all and it is fundamentally broken. Try looking at errno and strerror for the result. Also check the header files where the sem_* functions themselves are declared. At this point I would suggest: * Look at SEM_VALUE_MAX (out of interest) * Try changing uses of pa_semaphore_new to pass a nonzero initial value in sem_init (then just decrement it immediately inside pa_semaphore_init, obviously) * Check the return value for being nonzero in scenarios where there's been success. * Unfortunately, not owning a Mac I can't go any further helping you with this. * http://lists.zenoss.org/pipermail/zenoss-users/2006/000794.html indicates that, on 10.4 at least, sem_init can be linked to [stub?] but not implemented. YMMV. HTH, Sean On Sat, Nov 1, 2008 at 2:27 PM, Igor Zubkov <igor.zubkov at gmail.com> wrote: > Hi, All! > > After fixing some build errors, i have builded pulseaudio (current git > version) on Mac OS X. But, it fail to run with: > $ pulseaudio -v > I: caps.c: Dropping root privileges. > W: main.c: High-priority scheduling enabled in configuration but not > allowed by policy. > W: core-util.c: setpriority(): Permission denied > I: main.c: This is PulseAudio 0.9.14 > I: main.c: Page size is 4096 bytes > I: main.c: Machine ID is macbook-pro-15-igor-zubkov.local. > I: main.c: Using runtime directory > /Users/icesik/.pulse/macbook-pro-15-igor-zubkov.local:runtime. > I: main.c: Using state directory /Users/icesik/.pulse. > I: main.c: Running in system mode: no > W: pid.c: Stale PID file, overwriting. > I: main.c: Dude, your kernel stinks! The chef's recommendation today > is Linux with high-resolution timers enabled! > E: semaphore-posix.c: Assertion 'sem_init(&s->sem, 0, value) == 0' > failed at pulsecore/semaphore-posix.c:43, function pa_semaphore_new(). > Aborting. > Abort trap > $ > > Any ideas? > > -- > icesik > _______________________________________________ > pulseaudio-discuss mailing list > pulseaudio-discuss at mail.0pointer.de > https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss >