Hi,

I think we hit this bug and I think I figured out why it was 
happening tonight but I am yet to test my theory.  I think 
the problem is when the alarm() goes off, SIGALRM is received and the alarm 
handler is called while lck = 1.  The alarm handler calls write_log 

    if(now >= next_write_log)
        {
            write_log(0);
            next_write_log = now + cfg -> flush;
        }

    alarm(1);
}

which cannot do much because lck still equals 1 ie fails this check:

process.c: 616:   else if((writing == 0) && (lck == 0) && (may_write == 1)) /* 
delay if another write cycle is still in progress */

and ends up:

process.c: 722   else
process.c: 723     {
process.c: 724       DEBUG(DBG_STATE, sprintf(dbg, "flushing delayed (writing 
== %d, lck == %d, may_write == %d)\n",writing,lck,may_write));
process.c: 725     }

The thing is, because lck is 1, it can never reach the bit of the code where 
lck is set to 0 and so nothing 
is written to the net-acct.log file until you restart nacctd.

This is just a theory at the moment.  I intend on trying the patch in this bug 
and my own patch 
over the next week and can provide feedback to this bug.  Additionally, if 
people can provide 
feedback about my analysis, feel free to email me.

Best regards,

Ben Marsh

Reply via email to