comparison src/share/vm/runtime/handles.hpp @ 10271:f9be75d21404

8012902: remove use of global operator new - take 2 Summary: The fix of 8010992, disable use of global operator new and new[] which caused failure on some tests. This takes two of the bugs also add ALLOW_OPERATOR_NEW_USAGE to prevent crash for third party code calling operator new of jvm on certain platforms. Reviewed-by: coleenp, dholmes, zgu Contributed-by: yumin.qi@oracle.com
author minqi
date Tue, 14 May 2013 09:41:12 -0700
parents 5a9fa2ba85f0
children cf9d71d3e474
comparison
equal deleted inserted replaced
10269:a9270d9ecb13 10271:f9be75d21404
1 /* 1 /*
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
279 // 279 //
280 // If h has to be preserved, it can be converted to an oop or a local JNI handle 280 // If h has to be preserved, it can be converted to an oop or a local JNI handle
281 // across the HandleMark boundary. 281 // across the HandleMark boundary.
282 282
283 // The base class of HandleMark should have been StackObj but we also heap allocate 283 // The base class of HandleMark should have been StackObj but we also heap allocate
284 // a HandleMark when a thread is created. 284 // a HandleMark when a thread is created. The operator new is for this special case.
285 285
286 class HandleMark { 286 class HandleMark {
287 private: 287 private:
288 Thread *_thread; // thread that owns this mark 288 Thread *_thread; // thread that owns this mark
289 HandleArea *_area; // saved handle area 289 HandleArea *_area; // saved handle area
306 // Functions used by HandleMarkCleaner 306 // Functions used by HandleMarkCleaner
307 // called in the constructor of HandleMarkCleaner 307 // called in the constructor of HandleMarkCleaner
308 void push(); 308 void push();
309 // called in the destructor of HandleMarkCleaner 309 // called in the destructor of HandleMarkCleaner
310 void pop_and_restore(); 310 void pop_and_restore();
311 // overloaded operators
312 void* operator new(size_t size);
313 void* operator new [](size_t size);
314 void operator delete(void* p);
315 void operator delete[](void* p);
311 }; 316 };
312 317
313 //------------------------------------------------------------------------------------------------------------------------ 318 //------------------------------------------------------------------------------------------------------------------------
314 // A NoHandleMark stack object will verify that no handles are allocated 319 // A NoHandleMark stack object will verify that no handles are allocated
315 // in its scope. Enabled in debug mode only. 320 // in its scope. Enabled in debug mode only.