Projects
openEuler:24.03:SP1:Everything
openjdk-1.8.0
_service:tar_scm:8312200-Fix-Parse-catch_call_e...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:8312200-Fix-Parse-catch_call_exceptions-memory-leak.patch of Package openjdk-1.8.0
From c8190e59dbdcb9f52af521994523bae6b893716b Mon Sep 17 00:00:00 2001 Subject: 8312200: Fix Parse::catch_call_exceptions memory leak --- hotspot/src/share/vm/opto/doCall.cpp | 35 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/hotspot/src/share/vm/opto/doCall.cpp b/hotspot/src/share/vm/opto/doCall.cpp index 1b2b77c71..f41e6d386 100644 --- a/hotspot/src/share/vm/opto/doCall.cpp +++ b/hotspot/src/share/vm/opto/doCall.cpp @@ -698,24 +698,25 @@ void Parse::catch_call_exceptions(ciExceptionHandlerStream& handlers) { Node* i_o = this->i_o(); // Add a CatchNode. - GrowableArray<int>* bcis = new (C->node_arena()) GrowableArray<int>(C->node_arena(), 8, 0, -1); - GrowableArray<const Type*>* extypes = new (C->node_arena()) GrowableArray<const Type*>(C->node_arena(), 8, 0, NULL); - GrowableArray<int>* saw_unloaded = new (C->node_arena()) GrowableArray<int>(C->node_arena(), 8, 0, 0); + Arena tmp_mem(mtCompiler); + GrowableArray<int> bcis(&tmp_mem, 8, 0, -1); + GrowableArray<const Type*> extypes(&tmp_mem, 8, 0, NULL); + GrowableArray<int> saw_unloaded(&tmp_mem, 8, 0, -1); bool default_handler = false; for (; !handlers.is_done(); handlers.next()) { - ciExceptionHandler* h = handlers.handler(); - int h_bci = h->handler_bci(); - ciInstanceKlass* h_klass = h->is_catch_all() ? env()->Throwable_klass() : h->catch_klass(); + ciExceptionHandler* h = handlers.handler(); + int h_bci = h->handler_bci(); + ciInstanceKlass* h_klass = h->is_catch_all() ? env()->Throwable_klass() : h->catch_klass(); // Do not introduce unloaded exception types into the graph: if (!h_klass->is_loaded()) { - if (saw_unloaded->contains(h_bci)) { + if (saw_unloaded.contains(h_bci)) { /* We've already seen an unloaded exception with h_bci, so don't duplicate. Duplication will cause the CatchNode to be unnecessarily large. See 4713716. */ continue; } else { - saw_unloaded->append(h_bci); + saw_unloaded.append(h_bci); } } const Type* h_extype = TypeOopPtr::make_from_klass(h_klass); @@ -723,19 +724,19 @@ void Parse::catch_call_exceptions(ciExceptionHandlerStream& handlers) { h_extype = h_extype->join(TypeInstPtr::NOTNULL); assert(!h_extype->empty(), "sanity"); // Note: It's OK if the BCIs repeat themselves. - bcis->append(h_bci); - extypes->append(h_extype); + bcis.append(h_bci); + extypes.append(h_extype); if (h_bci == -1) { default_handler = true; } } if (!default_handler) { - bcis->append(-1); - extypes->append(TypeOopPtr::make_from_klass(env()->Throwable_klass())->is_instptr()); + bcis.append(-1); + extypes.append(TypeOopPtr::make_from_klass(env()->Throwable_klass())->is_instptr()); } - int len = bcis->length(); + int len = bcis.length(); CatchNode *cn = new (C) CatchNode(control(), i_o, len+1); Node *catch_ = _gvn.transform(cn); @@ -746,18 +747,18 @@ void Parse::catch_call_exceptions(ciExceptionHandlerStream& handlers) { PreserveJVMState pjvms(this); // Locals are just copied from before the call. // Get control from the CatchNode. - int handler_bci = bcis->at(i); + int handler_bci = bcis.at(i); Node* ctrl = _gvn.transform( new (C) CatchProjNode(catch_, i+1,handler_bci)); // This handler cannot happen? if (ctrl == top()) continue; set_control(ctrl); // Create exception oop - const TypeInstPtr* extype = extypes->at(i)->is_instptr(); - Node *ex_oop = _gvn.transform(new (C) CreateExNode(extypes->at(i), ctrl, i_o)); + const TypeInstPtr* extype = extypes.at(i)->is_instptr(); + Node *ex_oop = _gvn.transform(new (C) CreateExNode(extypes.at(i), ctrl, i_o)); // Handle unloaded exception classes. - if (saw_unloaded->contains(handler_bci)) { + if (saw_unloaded.contains(handler_bci)) { // An unloaded exception type is coming here. Do an uncommon trap. #ifndef PRODUCT // We do not expect the same handler bci to take both cold unloaded -- 2.22.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2