threads are the bug
   
    Henry Cejtin
     
    henry@sourcelight.com
       
    Thu, 5 Jul 2001 19:33:12 -0500
    
    
  
The rule is that if you don't declare a variable volatile, then if a function
looks at it and then grinds for a while, and then looks at it again,  it  can
assume  that it didn't change during the grinding.  Typically if the grinding
involves a function call, the assumption will not be made because C compilers
don't  do  much inter-procedure analysis.  You definitely do NOT want gcState
to be volatile.  That  will  cost  infinity.   What  you  want  is  for  just
gcState.signalIsPending  to  be  volatile.  It isn't clear to me that this is
enough.  setLimit writes to the limit member, reading base and fromSize.  The
signal  handler  writes  to  limit.   Thus either one can win if an interrupt
happens while the code is in Thread_atomicBegin.
ALL OF THIS SUCKS.  Why are we suffering  this  horrible  thread  world.   It
isn't  worth  it.  If you feel it is needed, just have another flag and check
that in addition.  I object though to the slow down.   The  thread  thing  is
silly.