diff options
| author | Jacob Pratt <jacob@jhpratt.dev> | 2024-12-26 21:56:49 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-26 21:56:49 -0500 |
| commit | 0521d6cf2cdbde8abc90192f99f0e4b401561716 (patch) | |
| tree | f458164c8c46c1a35385e36a1e72f26ca91f3e0a | |
| parent | 9551808f424c6c852e3c836699498afe644fe0bf (diff) | |
| parent | f19ba15a2cdc396a353fff70431df23016dc5276 (diff) | |
| download | rust-0521d6cf2cdbde8abc90192f99f0e4b401561716.tar.gz rust-0521d6cf2cdbde8abc90192f99f0e4b401561716.zip | |
Rollup merge of #134649 - SUPERCILEX:statx-remember, r=thomcc
Fix forgetting to save statx availability on success Looks like we forgot to save the statx state on success which means the first failure (common when checking if a file exists) will always require spending an invalid statx to confirm the failure is real. r? `@thomcc`
| -rw-r--r-- | library/std/src/sys/pal/unix/fs.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/library/std/src/sys/pal/unix/fs.rs b/library/std/src/sys/pal/unix/fs.rs index 37029bcd36e..408f8020c56 100644 --- a/library/std/src/sys/pal/unix/fs.rs +++ b/library/std/src/sys/pal/unix/fs.rs @@ -168,7 +168,8 @@ cfg_has_statx! {{ ) -> c_int } - if STATX_SAVED_STATE.load(Ordering::Relaxed) == STATX_STATE::Unavailable as u8 { + let statx_availability = STATX_SAVED_STATE.load(Ordering::Relaxed); + if statx_availability == STATX_STATE::Unavailable as u8 { return None; } @@ -200,6 +201,9 @@ cfg_has_statx! {{ return None; } } + if statx_availability == STATX_STATE::Unknown as u8 { + STATX_SAVED_STATE.store(STATX_STATE::Present as u8, Ordering::Relaxed); + } // We cannot fill `stat64` exhaustively because of private padding fields. let mut stat: stat64 = mem::zeroed(); |
