me
/
guix
Archived
1
0
Fork 0

daemon: Micro-optimize 'deletePath'.

'remove' calls 'unlink' first and falls back to 'rmdir' upon EISDIR.
This change gets rid of the 'unlink' call for every directory being
removed.

* nix/libutil/util.cc (_deletePath): Call 'unlink' or 'rmdir' depending
on 'st.st_mode', rather than call 'remove'.
master
Ludovic Courtès 2021-11-19 14:53:25 +01:00
parent 256c3e714a
commit 24224530d1
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 6 additions and 3 deletions

View File

@ -337,12 +337,15 @@ static void _deletePath(const Path & path, unsigned long long & bytesFreed, size
for (auto & i : readDirectory(path))
_deletePath(path + "/" + i.name, bytesFreed, linkThreshold);
}
int ret;
ret = S_ISDIR(st.st_mode) ? rmdir(path.c_str()) : unlink(path.c_str());
if (ret == -1)
throw SysError(format("cannot unlink `%1%'") % path);
#undef st_mode
#undef st_size
#undef st_nlink
if (remove(path.c_str()) == -1)
throw SysError(format("cannot unlink `%1%'") % path);
}