mirror of
https://github.com/NixOS/nix
synced 2025-07-06 21:41:48 +02:00
Print a warning when loading a large path into memory
I.e. if you have a derivation with src = ./huge-directory; you'll get a warning that this is not a good idea.
This commit is contained in:
parent
3c6b8a5215
commit
829af22759
3 changed files with 33 additions and 4 deletions
|
@ -54,8 +54,24 @@ FdSink::~FdSink()
|
|||
}
|
||||
|
||||
|
||||
size_t threshold = 256 * 1024 * 1024;
|
||||
|
||||
static void warnLargeDump()
|
||||
{
|
||||
printMsg(lvlError, "warning: dumping very large path (> 256 MiB); this may run out of memory");
|
||||
}
|
||||
|
||||
|
||||
void FdSink::write(const unsigned char * data, size_t len)
|
||||
{
|
||||
static bool warned = false;
|
||||
if (warn && !warned) {
|
||||
written += len;
|
||||
if (written > threshold) {
|
||||
warnLargeDump();
|
||||
warned = true;
|
||||
}
|
||||
}
|
||||
writeFull(fd, data, len);
|
||||
}
|
||||
|
||||
|
@ -256,4 +272,15 @@ template Paths readStrings(Source & source);
|
|||
template PathSet readStrings(Source & source);
|
||||
|
||||
|
||||
void StringSink::operator () (const unsigned char * data, size_t len)
|
||||
{
|
||||
static bool warned = false;
|
||||
if (!warned && s.size() > threshold) {
|
||||
warnLargeDump();
|
||||
warned = true;
|
||||
}
|
||||
s.append((const char *) data, len);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue