On Sat, Aug 02, 2008 at 02:22:05AM +0100, Samuel Thibault wrote:
> Barry deFreese, le Thu 24 Jul 2008 22:19:16 -0400, a écrit :
> > ext2fs.static: 
> > /var/tmp/hurd-20071119/build-tree/hurd/libports/port-ref.c:31:ports_port_ref:
> >  
> > Assertion 'pi->refcnt || pi->weakrefcnt' failed.
> 
> Quite odd.
> 
> I had a closer look at the locking functions, and I noticed that
> spin_*lock() functions do not have a "memory" clobber.  In my
> understanding of gcc's behavior, that lets it move memory operations
> outside the critical section, even with the volatile qualifier (which
> just means that the assembly part shouldn't be optimized away).  At
> least in all other spinlock implementations I know there is such
> clobber.
> 
> That could very well explain the oddity above (as well as other random
> things happening from times to times).

On Sat, Aug 02, 2008 at 01:12:29PM -0700, Roland McGrath wrote:
> Yes, I think there should be memory clobbers.  I added them in libc.

commit 4c8ac84562fb039586f0ed91280c7fa79a913029
Author: Roland McGrath <[email protected]>
Date:   Sat Aug 2 20:12:08 2008 +0000

    2008-08-02  Roland McGrath  <[email protected]>
    
        * sysdeps/mach/i386/machine-lock.h (__spin_unlock, __spin_try_lock):
        Add memory clobbers.


Yet, I just hit that one again:

    ext2fs: /var/tmp/hurd-20090404/./libports/port-ref.c:31: ports_port_ref: 
Assertion `pi->refcnt || pi->weakrefcnt' failed.

Samuel, I presume that version does include the glibc fix?


Regards,
 Thomas

Attachment: signature.asc
Description: Digital signature

Reply via email to