Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
5bbd7df3
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5bbd7df3
编写于
7月 10, 2013
作者:
F
fparain
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7143807: ResourceMark nesting problem in stringStream
Reviewed-by: kvn, dcubed
上级
567a6555
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
39 addition
and
1 deletion
+39
-1
src/share/vm/memory/resourceArea.hpp
src/share/vm/memory/resourceArea.hpp
+26
-1
src/share/vm/runtime/thread.cpp
src/share/vm/runtime/thread.cpp
+1
-0
src/share/vm/runtime/thread.hpp
src/share/vm/runtime/thread.hpp
+6
-0
src/share/vm/utilities/ostream.cpp
src/share/vm/utilities/ostream.cpp
+3
-0
src/share/vm/utilities/ostream.hpp
src/share/vm/utilities/ostream.hpp
+3
-0
未找到文件。
src/share/vm/memory/resourceArea.hpp
浏览文件 @
5bbd7df3
/*
* Copyright (c) 1997, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
3
, 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
...
...
@@ -83,6 +83,10 @@ protected:
Chunk
*
_chunk
;
// saved arena chunk
char
*
_hwm
,
*
_max
;
size_t
_size_in_bytes
;
#ifdef ASSERT
Thread
*
_thread
;
ResourceMark
*
_previous_resource_mark
;
#endif //ASSERT
void
initialize
(
Thread
*
thread
)
{
_area
=
thread
->
resource_area
();
...
...
@@ -92,6 +96,11 @@ protected:
_size_in_bytes
=
_area
->
size_in_bytes
();
debug_only
(
_area
->
_nesting
++
;)
assert
(
_area
->
_nesting
>
0
,
"must stack allocate RMs"
);
#ifdef ASSERT
_thread
=
thread
;
_previous_resource_mark
=
thread
->
current_resource_mark
();
thread
->
set_current_resource_mark
(
this
);
#endif // ASSERT
}
public:
...
...
@@ -111,6 +120,17 @@ protected:
_size_in_bytes
=
r
->
_size_in_bytes
;
debug_only
(
_area
->
_nesting
++
;)
assert
(
_area
->
_nesting
>
0
,
"must stack allocate RMs"
);
#ifdef ASSERT
Thread
*
thread
=
ThreadLocalStorage
::
thread
();
if
(
thread
!=
NULL
)
{
_thread
=
thread
;
_previous_resource_mark
=
thread
->
current_resource_mark
();
thread
->
set_current_resource_mark
(
this
);
}
else
{
_thread
=
NULL
;
_previous_resource_mark
=
NULL
;
}
#endif // ASSERT
}
void
reset_to_mark
()
{
...
...
@@ -137,6 +157,11 @@ protected:
assert
(
_area
->
_nesting
>
0
,
"must stack allocate RMs"
);
debug_only
(
_area
->
_nesting
--
;)
reset_to_mark
();
#ifdef ASSERT
if
(
_thread
!=
NULL
)
{
_thread
->
set_current_resource_mark
(
_previous_resource_mark
);
}
#endif // ASSERT
}
...
...
src/share/vm/runtime/thread.cpp
浏览文件 @
5bbd7df3
...
...
@@ -218,6 +218,7 @@ Thread::Thread() {
// allocated data structures
set_osthread
(
NULL
);
set_resource_area
(
new
(
mtThread
)
ResourceArea
());
DEBUG_ONLY
(
_current_resource_mark
=
NULL
;)
set_handle_area
(
new
(
mtThread
)
HandleArea
(
NULL
));
set_metadata_handles
(
new
(
ResourceObj
::
C_HEAP
,
mtClass
)
GrowableArray
<
Metadata
*>
(
30
,
true
));
set_active_handles
(
NULL
);
...
...
src/share/vm/runtime/thread.hpp
浏览文件 @
5bbd7df3
...
...
@@ -86,6 +86,8 @@ class GCTaskQueue;
class
ThreadClosure
;
class
IdealGraphPrinter
;
DEBUG_ONLY
(
class
ResourceMark
;)
class
WorkerThread
;
// Class hierarchy
...
...
@@ -531,6 +533,8 @@ public:
// Thread local resource area for temporary allocation within the VM
ResourceArea
*
_resource_area
;
DEBUG_ONLY
(
ResourceMark
*
_current_resource_mark
;)
// Thread local handle area for allocation of handles within the VM
HandleArea
*
_handle_area
;
GrowableArray
<
Metadata
*>*
_metadata_handles
;
...
...
@@ -585,6 +589,8 @@ public:
// Deadlock detection
bool
allow_allocation
()
{
return
_allow_allocation_count
==
0
;
}
ResourceMark
*
current_resource_mark
()
{
return
_current_resource_mark
;
}
void
set_current_resource_mark
(
ResourceMark
*
rm
)
{
_current_resource_mark
=
rm
;
}
#endif
void
check_for_valid_safepoint_state
(
bool
potential_vm_operation
)
PRODUCT_RETURN
;
...
...
src/share/vm/utilities/ostream.cpp
浏览文件 @
5bbd7df3
...
...
@@ -296,6 +296,7 @@ stringStream::stringStream(size_t initial_size) : outputStream() {
buffer
=
NEW_RESOURCE_ARRAY
(
char
,
buffer_length
);
buffer_pos
=
0
;
buffer_fixed
=
false
;
DEBUG_ONLY
(
rm
=
Thread
::
current
()
->
current_resource_mark
();)
}
// useful for output to fixed chunks of memory, such as performance counters
...
...
@@ -321,6 +322,8 @@ void stringStream::write(const char* s, size_t len) {
end
=
buffer_length
*
2
;
}
char
*
oldbuf
=
buffer
;
assert
(
rm
==
NULL
||
Thread
::
current
()
->
current_resource_mark
()
==
rm
,
"stringStream is re-allocated with a different ResourceMark"
);
buffer
=
NEW_RESOURCE_ARRAY
(
char
,
end
);
strncpy
(
buffer
,
oldbuf
,
buffer_pos
);
buffer_length
=
end
;
...
...
src/share/vm/utilities/ostream.hpp
浏览文件 @
5bbd7df3
...
...
@@ -28,6 +28,8 @@
#include "memory/allocation.hpp"
#include "runtime/timer.hpp"
DEBUG_ONLY
(
class
ResourceMark
;)
// Output streams for printing
//
// Printing guidelines:
...
...
@@ -177,6 +179,7 @@ class stringStream : public outputStream {
size_t
buffer_pos
;
size_t
buffer_length
;
bool
buffer_fixed
;
DEBUG_ONLY
(
ResourceMark
*
rm
;)
public:
stringStream
(
size_t
initial_bufsize
=
256
);
stringStream
(
char
*
fixed_buffer
,
size_t
fixed_buffer_size
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录