From 74d6a8221c11ac4aa72808863db423aca44117f2 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Fri, 3 Oct 2014 10:54:19 +0000 Subject: [PATCH] Revert "Fix OOM throwing if it happens in finalizer reference" This reverts commit 6d7729d6ae8b2ac3800e92092d61390ce4e3b6d7. Change-Id: I3e863b7372657ee85b0e48029c3a3e2b4ba75a7c --- runtime/mirror/class-inl.h | 4 ---- test/080-oom-throw/src/Main.java | 50 ++++------------------------------------ 2 files changed, 4 insertions(+), 50 deletions(-) diff --git a/runtime/mirror/class-inl.h b/runtime/mirror/class-inl.h index 661de68e5..3d3ae166a 100644 --- a/runtime/mirror/class-inl.h +++ b/runtime/mirror/class-inl.h @@ -553,10 +553,6 @@ inline Object* Class::Alloc(Thread* self, gc::AllocatorType allocator_type) { allocator_type, VoidFunctor()); if (add_finalizer && LIKELY(obj != nullptr)) { heap->AddFinalizerReference(self, &obj); - if (UNLIKELY(self->IsExceptionPending())) { - // Failed to allocate finalizer reference, it means that whole allocation failed - obj = nullptr; - } } return obj; } diff --git a/test/080-oom-throw/src/Main.java b/test/080-oom-throw/src/Main.java index 63c521521..c93f8bbc5 100644 --- a/test/080-oom-throw/src/Main.java +++ b/test/080-oom-throw/src/Main.java @@ -15,15 +15,13 @@ */ public class Main { - static char [][] holder; - static class ArrayMemEater { static boolean sawOome; static void blowup(char[][] holder) { try { for (int i = 0; i < holder.length; ++i) { - holder[i] = new char[1022 * 1024]; + holder[i] = new char[1024 * 1024]; } } catch (OutOfMemoryError oome) { ArrayMemEater.sawOome = true; @@ -52,30 +50,8 @@ public class Main { } } - static class InstanceFinalizerMemEater { - static boolean sawOome; - static InstanceFinalizerMemEater hook; - - InstanceFinalizerMemEater next; - - static InstanceFinalizerMemEater allocate() { - try { - return new InstanceFinalizerMemEater(); - } catch (OutOfMemoryError e) { - InstanceFinalizerMemEater.sawOome = true; - return null; - } - } - - static void confuseCompilerOptimization(InstanceFinalizerMemEater instance) { - hook = instance; - } - - protected void finalize() {} - } - - static boolean triggerArrayOOM(char[][] holder) { - ArrayMemEater.blowup(holder); + static boolean triggerArrayOOM() { + ArrayMemEater.blowup(new char[128 * 1024][]); return ArrayMemEater.sawOome; } @@ -91,29 +67,11 @@ public class Main { return InstanceMemEater.sawOome; } - static boolean triggerInstanceFinalizerOOM() { - InstanceFinalizerMemEater memEater = InstanceFinalizerMemEater.allocate(); - InstanceFinalizerMemEater lastMemEater = memEater; - do { - lastMemEater.next = InstanceFinalizerMemEater.allocate(); - lastMemEater = lastMemEater.next; - } while (lastMemEater != null); - memEater.confuseCompilerOptimization(memEater); - InstanceFinalizerMemEater.hook = null; - return InstanceFinalizerMemEater.sawOome; - } - public static void main(String[] args) { - // Keep holder alive to make instance OOM happen faster - holder = new char[128 * 1024][]; - if (triggerArrayOOM(holder)) { + if (triggerArrayOOM()) { System.out.println("NEW_ARRAY correctly threw OOME"); } - if (!triggerInstanceFinalizerOOM()) { - System.out.println("NEW_INSTANCE (finalize) did not threw OOME"); - } - if (triggerInstanceOOM()) { System.out.println("NEW_INSTANCE correctly threw OOME"); } -- 2.11.0