in reply to Safe Counter Follow Up # 2
in thread Safe Counter

You have a race condition [but see update below] by closing and dropping the lock between reading and writing the file. Do both within the same lock with the '+<' mode of open.

$completeadd = "counter.txt"; open MFILE, '+<', $completeadd or die $!; flock(MFILE, LOCK_EX) || die $!; chomp($filedata=<MFILE>); $filedata++; seek MFILE, 0, 0; print MFILE $filedata, $/ or die $!; close MFILE or die $!;

You seem to be trying to set up the sacrifice file as a semaphore, but once in place you don't use it for anything.

Update: Oops, now I see the semaphore ought to be effective. Your symptoms indicate that it isn't, however. Is the counter opened elsewhere by something that doesn't honor the semaphore?? Thanks, ++davido.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re: Re: Safe Counter Follow Up # 2
by Anonymous Monk on May 07, 2004 at 04:02 UTC
    Nope. This is the only place where the counter is opened. Could it be that the semaphore isn't working?