Mercurial > hg > truffle
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. |