On 24/10/19(Thu) 13:30, Stuart Henderson wrote:
> On 2019/10/21 04:06, Martin Pieuchot wrote:
> > CVSROOT:    /cvs
> > Module name:        src
> > Changes by: [email protected]    2019/10/21 04:06:31
> > 
> > Modified files:
> >     lib/librthread : synch.h 
> > 
> > Log message:
> > Use process-private futexes to avoid the uvm_map lookup overhead.
> > 
> > While here kill unused _wait() function.
> > 
> > ok visa@
> > 
> 
> I'm going to back this one out for now - it causes hangs with Python
> (seems to be 100% reproducible). Easy/fast test case:
> 
> cd /usr/ports/graphics/py-Pillow
> make
> 
> With this commit, it hangs after
> 
> writing manifest file 'src/Pillow.egg-info/SOURCES.txt'

ltrace shows that sempahore are used.

gdb says that sem_init() is always called with `pshared' set to 0.

However python forks then sleeps in futex(2), via sem_wait(3), when
private futexes are used. 

When non-private futexes are used it it seems that threads from a
process wake up the sleeping thread from a parent process:

 84294/104794  python2.7 CALL  futex(0x1a49bbca3008,0x1<FUTEX_WAIT>,0,0,0)
 84677/611464  python2.7 CALL  futex(0x1a49bbca3008,0x2<FUTEX_WAKE>,1,0,0)

To me it seems that shared semaphore, that are advertised in librthread as
non-supported, are in fact used.

Python has a second lock implementation using mutex and condvar, I'd be
interested to know if that works.

Reply via email to