summaryrefslogtreecommitdiff
path: root/src/util-inl.h
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2016-09-10 18:21:20 +0200
committerAnna Henningsen <anna@addaleax.net>2016-09-29 09:46:42 +0200
commit72c60e892c6f5ca309e20953e032a590be7787db (patch)
tree05d996c1be5fe6efd1b51580a34709263bb86ee8 /src/util-inl.h
parentea94086ad2b53268b5cb870f9ba5a1f84741fa41 (diff)
downloadnode-new-72c60e892c6f5ca309e20953e032a590be7787db.tar.gz
src: notify V8 for low memory when alloc fails
Call `v8::Isolate::GetCurrent()->LowMemoryNotification()` when an allocation fails to give V8 a chance to clean up and return memory before retrying (and possibly giving up). PR-URL: https://github.com/nodejs/node/pull/8482 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Ilkka Myller <ilkka.myller@nodefield.com>
Diffstat (limited to 'src/util-inl.h')
-rw-r--r--src/util-inl.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/util-inl.h b/src/util-inl.h
index a3d446c2a5..51adb81692 100644
--- a/src/util-inl.h
+++ b/src/util-inl.h
@@ -253,7 +253,15 @@ T* UncheckedRealloc(T* pointer, size_t n) {
return nullptr;
}
- return static_cast<T*>(realloc(pointer, full_size));
+ void* allocated = realloc(pointer, full_size);
+
+ if (UNLIKELY(allocated == nullptr)) {
+ // Tell V8 that memory is low and retry.
+ LowMemoryNotification();
+ allocated = realloc(pointer, full_size);
+ }
+
+ return static_cast<T*>(allocated);
}
// As per spec realloc behaves like malloc if passed nullptr.