[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: test008 failed in HEAD



If you are using gcc, it might help to compile BDB and/or OpenLDAP
without -O and see if that helps.  The gcc mailinglist and
comp.programming.threads recently discussed a some gcc optimizations
that are invalid for threaded code.   E.g. gcc can turn things like

<static or extern> int v;
...
   if (set_v()) v += 1;
into
   flag1 = (set_v() != 0);
   reg2 = v;
   reg2 += flag1;
   v = reg2;

If set_v() does trylock(lock protecting v) and returns true at success,
this breaks thread safety when set_v() fails.

The optimization is valid as far as the C standard is concerned, but
POSIX forbids it for threaded code.  Otherwise one would have to
sprinkle 'volatile' all over a threaded program, to protect it from the
compiler.

-- 
Regards,
Hallvard