Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
7a4a43e5
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7a4a43e5
编写于
8月 29, 2014
作者:
K
ksrini
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8046545: JNI exception pending in jdk/src/share/bin/java.c
Reviewed-by: darcy, ksrini Contributed-by: neil.toda@oracle.com
上级
12b2cd75
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
53 addition
and
6 deletion
+53
-6
src/share/bin/java.c
src/share/bin/java.c
+9
-5
src/share/bin/java.h
src/share/bin/java.h
+44
-1
未找到文件。
src/share/bin/java.c
浏览文件 @
7a4a43e5
/*
* Copyright (c) 1995, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1995, 201
4
, 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
...
...
@@ -1248,11 +1248,13 @@ NewPlatformString(JNIEnv *env, char *s)
(
*
env
)
->
SetByteArrayRegion
(
env
,
ary
,
0
,
len
,
(
jbyte
*
)
s
);
if
(
!
(
*
env
)
->
ExceptionOccurred
(
env
))
{
if
(
makePlatformStringMID
==
NULL
)
{
NULL_CHECK0
(
makePlatformStringMID
=
(
*
env
)
->
GetStaticMethodID
(
env
,
CHECK_JNI_RETURN_0
(
makePlatformStringMID
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
"makePlatformString"
,
"(Z[B)Ljava/lang/String;"
));
}
str
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
makePlatformStringMID
,
USE_STDERR
,
ary
);
CHECK_JNI_RETURN_0
(
str
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
makePlatformStringMID
,
USE_STDERR
,
ary
));
(
*
env
)
->
DeleteLocalRef
(
env
,
ary
);
return
str
;
}
...
...
@@ -1303,7 +1305,9 @@ LoadMainClass(JNIEnv *env, int mode, char *name)
"(ZILjava/lang/String;)Ljava/lang/Class;"
));
str
=
NewPlatformString
(
env
,
name
);
result
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
mid
,
USE_STDERR
,
mode
,
str
);
CHECK_JNI_RETURN_0
(
result
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
mid
,
USE_STDERR
,
mode
,
str
));
if
(
JLI_IsTraceLauncher
())
{
end
=
CounterGet
();
...
...
src/share/bin/java.h
浏览文件 @
7a4a43e5
/*
* Copyright (c) 1998, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 201
4
, 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
...
...
@@ -256,4 +256,47 @@ typedef struct {
#define NULL_CHECK(NC_check_pointer) \
NULL_CHECK_RETURN_VALUE(NC_check_pointer, )
/*
* For JNI calls :
* - check for thrown exceptions
* - check for null return
*
* JNI calls can return null and/or throw an exception. Check for these.
*
* : CHECK_JNI_RETURN_EXCEPTION()
* return the specified RETURNVALUE if exception was generated
* : CHECK_JNI_RETURN_0(JNISTATEMENT) : check if JNISTATEMENT was successful, return 0 if not
* : CHECK_JNI_RETURN_VOID(JNISTATEMENT) : check if JNISTATEMENT was successful, return void if not
* : CHECK_JNI_RETURN_VALUE(JNISTATEMENT,n) : check if JNISTATEMENT was successful, return n if not
*
* These macros need at least one parameter, the JNI statement [ JNISTATEMENT ].
*
* E.G.: check the JNI statement, and specify a value to return if a failure was detected.
*
* CHECK_JNI_RETURN_VALUE(str = (*env)->CallStaticObjectMethod(env, cls,
* makePlatformStringMID, USE_STDERR, ary), -1);
*/
#define RETURNVOID return
#define RETURN0 return 0
#define RETURN(N) return (N)
#define CHECK_JNI_RETURN_EXCEPTION(RETURNVALUE) \
if ((((*env)->ExceptionOccurred(env))!=NULL)) { \
RETURNVALUE; \
}
#define CHECK_JNI_RETURN_0(JNISTATEMENT) \
CHECK_JNI_RETURN_EXCEPTION(RETURN0); \
NULL_CHECK0(JNISTATEMENT);
#define CHECK_JNI_RETURN_VOID(JNISTATEMENT) \
CHECK_JNI_RETURN_EXCEPTION(RETURNVOID); \
NULL_CHECK(JNISTATEMENT);
#define CHECK_JNI_RETURN_VALUE(JNISTATEMENT, NCRV_return_value) \
CHECK_JNI_RETURN_EXCEPTION(RETURN(NCRV_return_value)); \
NULL_CHECK_RETURN_VALUE(JNISTATEMENT, NCRV_return_value);
#endif
/* _JAVA_H_ */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录