# HG changeset patch # User kvn # Date 1297100761 28800 # Node ID 194c9fdee63151ec493041bf2c38230b4b4dddc1 # Parent c52cba2a33593285f5d702eaf0566b1017566a66 7017240: C2: native memory leak in nsk/regression/b4675027 on windows-x86 in comp mode with G1 Summary: Add ResourceMark into PhaseIdealLoop::build_and_optimize(). Reviewed-by: never diff -r c52cba2a3359 -r 194c9fdee631 src/share/vm/opto/loopnode.cpp --- a/src/share/vm/opto/loopnode.cpp Tue Feb 01 10:27:02 2011 -0800 +++ b/src/share/vm/opto/loopnode.cpp Mon Feb 07 09:46:01 2011 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1480,6 +1480,8 @@ // Create a PhaseLoop. Build the ideal Loop tree. Map each Ideal Node to // its corresponding LoopNode. If 'optimize' is true, do some loop cleanups. void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool do_loop_pred) { + ResourceMark rm; + int old_progress = C->major_progress(); // Reset major-progress flag for the driver's heuristics @@ -2013,7 +2015,7 @@ if (_dom_stk == NULL) { uint init_size = C->unique() / 100; // Guess that 1/100 is a reasonable initial size. if (init_size < 10) init_size = 10; - _dom_stk = new (C->node_arena()) GrowableArray(C->node_arena(), init_size, 0, 0); + _dom_stk = new GrowableArray(init_size); } // Compute new depth for each node. for (i = 0; i < _idom_size; i++) { diff -r c52cba2a3359 -r 194c9fdee631 src/share/vm/opto/loopnode.hpp --- a/src/share/vm/opto/loopnode.hpp Tue Feb 01 10:27:02 2011 -0800 +++ b/src/share/vm/opto/loopnode.hpp Mon Feb 07 09:46:01 2011 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -700,7 +700,7 @@ PhaseIdealLoop( PhaseIterGVN &igvn) : PhaseTransform(Ideal_Loop), _igvn(igvn), - _dom_lca_tags(C->comp_arena()), + _dom_lca_tags(arena()), // Thread::resource_area _verify_me(NULL), _verify_only(true) { build_and_optimize(false, false); @@ -721,7 +721,7 @@ PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool do_loop_pred) : PhaseTransform(Ideal_Loop), _igvn(igvn), - _dom_lca_tags(C->comp_arena()), + _dom_lca_tags(arena()), // Thread::resource_area _verify_me(NULL), _verify_only(false) { build_and_optimize(do_split_ifs, do_loop_pred); @@ -731,7 +731,7 @@ PhaseIdealLoop( PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) : PhaseTransform(Ideal_Loop), _igvn(igvn), - _dom_lca_tags(C->comp_arena()), + _dom_lca_tags(arena()), // Thread::resource_area _verify_me(verify_me), _verify_only(false) { build_and_optimize(false, false);