On Wednesday, July 17, 2002, at 07:04 , George Schlossnagle wrote:
>>> The main problem appears to be that instead of taking a different branch >>> if open() or flock() fails you continue on as if they had succeeded. > > flock($fh,LOCK_EX ) is a blocking call, so it won't return until the lock > is available. in lieu of going to semaphores... { not a bad solution for most } { there is also a race in there for 'grab the semaphore' but it is probably still better than most solutions... } you can get round that with an 'alarm()' - something on the form my $timeout=5; my $getLock=1; my $alarmFlag=0; local $SIG{ALRM} = sub { $alarmFlag=1;} while( $getLock ) { open(FH,....) or die ....; alarm $timeout; flock(....) alarm 0; if( $alarmFlag) { $alarmFlag=0; close(FH); }else { $getLock=0; } } and/or stuff that in an eval block, and..... yadda yadda yadda This way either you get in and out of there quickly or block - but in a way that does not have the file open... one is still in a race condition... the other is to go with the 'symbolic link' type of trick of the form of $filename.lockget -> $filename - and everyone checks for the existence of that file first.... to try to avoid the open for the flock().... ciao drieux --- -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]