Thread Sicherheit: Race condition zwischen open bzw. fstat und lock? (5 answers)
Opened by GwenDragon at 2011-02-15 13:06

GwenDragon
 2011-02-15 13:06
#145668 #145668
User since
2005-01-17
14754 Artikel
Admin1
[Homepage]
user image
Wenn ich folgende Beispielcodes verwende, kann es doch zwischen diversen Dateifunktionen zu einer Race condition (RC) kommen, oder?

Code (perl): (dl )
1
2
3
open(my $fh1, "+<", "BLAH") or return;
# <---- dazwischen Race Condition möglich?
flock($fh1, LOCK_EX);


oder
Code (perl): (dl )
1
2
3
sysopen(my $fh, "BLAH", O_RDWR) or return;
# <---- dazwischen Race Condition möglich?
flock($fh, LOCK_EX);


oder
Code (perl): (dl )
1
2
3
4
5
6
7
8
my $numlinks = (stat( "BLAH"))[3];
# <---- dazwischen Race Condition möglich?
if ($numlinks == 0) {
# <---- dazwischen Race Condition möglich?
  open(my $fh, "+<", "BLAH") or return;
# <---- dazwischen Race Condition möglich?
  flock($fh, LOCK_EX);
}


Und erst recht bei:
Code (perl): (dl )
1
2
3
4
5
6
if (-l "BLAH") {
   # <---- dazwischen Race Condition möglich?
   open(my $fh, "+<", "BLAH") or return;
   # <---- dazwischen Race Condition möglich?
   flock($fh, LOCK_EX);
}

Deswegen sollte eine ja die Finger von den Dateitestoperatoren lassen.

Auf einem (stark beschäftigten) System kann es doch zwischen den Aufrufen zur einer RC kommen.
Oder irre ich mich da?

View full thread Sicherheit: Race condition zwischen open bzw. fstat und lock?