diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-10-28T12·29+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-10-28T12·29+0000 |
commit | e11e6fb1c6709ca3f0e596a7b1fb988df2fbd9b1 (patch) | |
tree | b77c8230ccc77327f2feae591c2e0932610d9bb0 /src/libmain/shared.cc | |
parent | 8a788e38ac7efc785ffe4fcf49a4e031c7784216 (diff) |
* Handle out of memory condition.
Diffstat (limited to 'src/libmain/shared.cc')
-rw-r--r-- | src/libmain/shared.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc index eddc4e64b3d7..440949bd2a0a 100644 --- a/src/libmain/shared.cc +++ b/src/libmain/shared.cc @@ -13,6 +13,10 @@ #include <sys/stat.h> #include <unistd.h> +#if HAVE_BOEHMGC +#include <gc/gc.h> +#endif + namespace nix { @@ -314,6 +318,14 @@ static void setuidInit() } +/* Called when the Boehm GC runs out of memory. */ +static void * oomHandler(size_t requested) +{ + /* Convert this to a proper C++ exception. */ + throw std::bad_alloc(); +} + + } @@ -335,6 +347,14 @@ int main(int argc, char * * argv) std::ios::sync_with_stdio(false); +#if HAVE_BOEHMGC + /* Initialise the Boehm garbage collector. This isn't necessary + on most platforms, but for portability we do it anyway. */ + GC_INIT(); + + GC_oom_fn = oomHandler; +#endif + try { try { initAndRun(argc, argv); |