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).

Samuel


Reply via email to