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
In reply to Re: Safe Counter Follow Up # 2
by Zaxo
in thread Safe Counter
by Gorby
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |