Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
8377d6a3
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看板
提交
8377d6a3
编写于
1月 08, 2009
作者:
A
acorn
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6791656: nsk defclass0 asserts handles.hpp
Reviewed-by: phh, xlu
上级
cbb5556e
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
9 addition
and
8 deletion
+9
-8
src/share/vm/classfile/systemDictionary.cpp
src/share/vm/classfile/systemDictionary.cpp
+9
-8
未找到文件。
src/share/vm/classfile/systemDictionary.cpp
浏览文件 @
8377d6a3
...
...
@@ -1471,26 +1471,27 @@ void SystemDictionary::define_instance_class(instanceKlassHandle k, TRAPS) {
instanceKlassHandle
SystemDictionary
::
find_or_define_instance_class
(
symbolHandle
class_name
,
Handle
class_loader
,
instanceKlassHandle
k
,
TRAPS
)
{
instanceKlassHandle
nh
=
instanceKlassHandle
();
// null Handle
symbolHandle
name_h
(
THREAD
,
k
->
name
());
// passed in class_name may be null
unsigned
int
d_hash
=
dictionary
()
->
compute_hash
(
class_name
,
class_loader
);
unsigned
int
d_hash
=
dictionary
()
->
compute_hash
(
name_h
,
class_loader
);
int
d_index
=
dictionary
()
->
hash_to_index
(
d_hash
);
// Hold SD lock around find_class and placeholder creation for DEFINE_CLASS
unsigned
int
p_hash
=
placeholders
()
->
compute_hash
(
class_name
,
class_loader
);
unsigned
int
p_hash
=
placeholders
()
->
compute_hash
(
name_h
,
class_loader
);
int
p_index
=
placeholders
()
->
hash_to_index
(
p_hash
);
PlaceholderEntry
*
probe
;
{
MutexLocker
mu
(
SystemDictionary_lock
,
THREAD
);
// First check if class already defined
klassOop
check
=
find_class
(
d_index
,
d_hash
,
class_name
,
class_loader
);
klassOop
check
=
find_class
(
d_index
,
d_hash
,
name_h
,
class_loader
);
if
(
check
!=
NULL
)
{
return
(
instanceKlassHandle
(
THREAD
,
check
));
}
// Acquire define token for this class/classloader
symbolHandle
nullsymbolHandle
;
probe
=
placeholders
()
->
find_and_add
(
p_index
,
p_hash
,
class_name
,
class_loader
,
PlaceholderTable
::
DEFINE_CLASS
,
nullsymbolHandle
,
THREAD
);
probe
=
placeholders
()
->
find_and_add
(
p_index
,
p_hash
,
name_h
,
class_loader
,
PlaceholderTable
::
DEFINE_CLASS
,
nullsymbolHandle
,
THREAD
);
// Wait if another thread defining in parallel
// All threads wait - even those that will throw duplicate class: otherwise
// caller is surprised by LinkageError: duplicate, but findLoadedClass fails
...
...
@@ -1503,10 +1504,10 @@ instanceKlassHandle SystemDictionary::find_or_define_instance_class(symbolHandle
// caught by finding an entry in the SystemDictionary
if
((
UnsyncloadClass
||
AllowParallelDefineClass
)
&&
(
probe
->
instanceKlass
()
!=
NULL
))
{
probe
->
remove_seen_thread
(
THREAD
,
PlaceholderTable
::
DEFINE_CLASS
);
placeholders
()
->
find_and_remove
(
p_index
,
p_hash
,
class_name
,
class_loader
,
THREAD
);
placeholders
()
->
find_and_remove
(
p_index
,
p_hash
,
name_h
,
class_loader
,
THREAD
);
SystemDictionary_lock
->
notify_all
();
#ifdef ASSERT
klassOop
check
=
find_class
(
d_index
,
d_hash
,
class_name
,
class_loader
);
klassOop
check
=
find_class
(
d_index
,
d_hash
,
name_h
,
class_loader
);
assert
(
check
!=
NULL
,
"definer missed recording success"
);
#endif
return
(
instanceKlassHandle
(
THREAD
,
probe
->
instanceKlass
()));
...
...
@@ -1523,7 +1524,7 @@ instanceKlassHandle SystemDictionary::find_or_define_instance_class(symbolHandle
// definer must notify any waiting threads
{
MutexLocker
mu
(
SystemDictionary_lock
,
THREAD
);
PlaceholderEntry
*
probe
=
placeholders
()
->
get_entry
(
p_index
,
p_hash
,
class_name
,
class_loader
);
PlaceholderEntry
*
probe
=
placeholders
()
->
get_entry
(
p_index
,
p_hash
,
name_h
,
class_loader
);
assert
(
probe
!=
NULL
,
"DEFINE_CLASS placeholder lost?"
);
if
(
probe
!=
NULL
)
{
if
(
HAS_PENDING_EXCEPTION
)
{
...
...
@@ -1534,7 +1535,7 @@ instanceKlassHandle SystemDictionary::find_or_define_instance_class(symbolHandle
}
probe
->
set_definer
(
NULL
);
probe
->
remove_seen_thread
(
THREAD
,
PlaceholderTable
::
DEFINE_CLASS
);
placeholders
()
->
find_and_remove
(
p_index
,
p_hash
,
class_name
,
class_loader
,
THREAD
);
placeholders
()
->
find_and_remove
(
p_index
,
p_hash
,
name_h
,
class_loader
,
THREAD
);
SystemDictionary_lock
->
notify_all
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录