]> git.sesse.net Git - pr0n/commitdiff
Fix an extremely long-standing error with mkdir() racing from multiple threads.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 19 Mar 2023 20:35:10 +0000 (21:35 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 19 Mar 2023 20:35:10 +0000 (21:35 +0100)
perl/Sesse/pr0n/Common.pm

index 27993647cab189c2d926ab5c3d690e1de7cf6edd..101cee6283603405dfcc5830dd9e277e837a0613 100644 (file)
@@ -226,13 +226,15 @@ sub ensure_disk_location_exists {
        my $img_dir = $Sesse::pr0n::Config::image_base . "/images/$dir/";
        if (! -d $img_dir) {
                log_info($r, "Need to create new image directory $img_dir");
        my $img_dir = $Sesse::pr0n::Config::image_base . "/images/$dir/";
        if (! -d $img_dir) {
                log_info($r, "Need to create new image directory $img_dir");
-               mkdir($img_dir) or die "Couldn't create new image directory $img_dir";
+               mkdir($img_dir);  # Ignore errors, there could be a race.
+               -d $img_dir or die "Couldn't create new image directory $img_dir";
        }
 
        my $cache_dir = $Sesse::pr0n::Config::image_base . "/cache/$dir/";
        if (! -d $cache_dir) {
                log_info($r, "Need to create new cache directory $cache_dir");
        }
 
        my $cache_dir = $Sesse::pr0n::Config::image_base . "/cache/$dir/";
        if (! -d $cache_dir) {
                log_info($r, "Need to create new cache directory $cache_dir");
-               mkdir($cache_dir) or die "Couldn't create new image directory $cache_dir";
+               mkdir($cache_dir);  # Ignore errors, there could be a race.
+               -d $cache_dir or die "Couldn't create new cache directory $cache_dir";
        }
 }
 
        }
 }