Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
2fa31573
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看板
提交
2fa31573
编写于
12月 13, 2019
作者:
A
andrew
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8208715: Conversion of milliseconds to nanoseconds in UNIXProcess contains bug
Reviewed-by: martin, andrew
上级
adb98e98
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
42 addition
and
7 deletion
+42
-7
src/solaris/classes/java/lang/UNIXProcess.java
src/solaris/classes/java/lang/UNIXProcess.java
+1
-2
src/windows/classes/java/lang/ProcessImpl.java
src/windows/classes/java/lang/ProcessImpl.java
+6
-2
src/windows/native/java/lang/ProcessImpl_md.c
src/windows/native/java/lang/ProcessImpl_md.c
+2
-2
test/java/lang/ProcessBuilder/Basic.java
test/java/lang/ProcessBuilder/Basic.java
+33
-1
未找到文件。
src/solaris/classes/java/lang/UNIXProcess.java
浏览文件 @
2fa31573
...
@@ -408,8 +408,7 @@ final class UNIXProcess extends Process {
...
@@ -408,8 +408,7 @@ final class UNIXProcess extends Process {
long
deadline
=
System
.
nanoTime
()
+
remainingNanos
;
long
deadline
=
System
.
nanoTime
()
+
remainingNanos
;
do
{
do
{
// Round up to next millisecond
TimeUnit
.
NANOSECONDS
.
timedWait
(
this
,
remainingNanos
);
wait
(
TimeUnit
.
NANOSECONDS
.
toMillis
(
remainingNanos
+
999_999L
));
if
(
hasExited
)
{
if
(
hasExited
)
{
return
true
;
return
true
;
}
}
...
...
src/windows/classes/java/lang/ProcessImpl.java
浏览文件 @
2fa31573
...
@@ -520,11 +520,15 @@ final class ProcessImpl extends Process {
...
@@ -520,11 +520,15 @@ final class ProcessImpl extends Process {
if
(
timeout
<=
0
)
return
false
;
if
(
timeout
<=
0
)
return
false
;
long
remainingNanos
=
unit
.
toNanos
(
timeout
);
long
remainingNanos
=
unit
.
toNanos
(
timeout
);
long
deadline
=
System
.
nanoTime
()
+
remainingNanos
;
long
deadline
=
System
.
nanoTime
()
+
remainingNanos
;
do
{
do
{
// Round up to next millisecond
// Round up to next millisecond
long
msTimeout
=
TimeUnit
.
NANOSECONDS
.
toMillis
(
remainingNanos
+
999_999L
);
long
msTimeout
=
TimeUnit
.
NANOSECONDS
.
toMillis
(
remainingNanos
+
999_999L
);
if
(
msTimeout
<
0
)
{
// if wraps around then wait a long while
msTimeout
=
Integer
.
MAX_VALUE
;
}
waitForTimeoutInterruptibly
(
handle
,
msTimeout
);
waitForTimeoutInterruptibly
(
handle
,
msTimeout
);
if
(
Thread
.
interrupted
())
if
(
Thread
.
interrupted
())
throw
new
InterruptedException
();
throw
new
InterruptedException
();
...
@@ -538,7 +542,7 @@ final class ProcessImpl extends Process {
...
@@ -538,7 +542,7 @@ final class ProcessImpl extends Process {
}
}
private
static
native
void
waitForTimeoutInterruptibly
(
private
static
native
void
waitForTimeoutInterruptibly
(
long
handle
,
long
timeout
);
long
handle
,
long
timeout
Millis
);
public
void
destroy
()
{
terminateProcess
(
handle
);
}
public
void
destroy
()
{
terminateProcess
(
handle
);
}
...
...
src/windows/native/java/lang/ProcessImpl_md.c
浏览文件 @
2fa31573
...
@@ -421,10 +421,10 @@ JNIEXPORT void JNICALL
...
@@ -421,10 +421,10 @@ JNIEXPORT void JNICALL
Java_java_lang_ProcessImpl_waitForTimeoutInterruptibly
(
JNIEnv
*
env
,
Java_java_lang_ProcessImpl_waitForTimeoutInterruptibly
(
JNIEnv
*
env
,
jclass
ignored
,
jclass
ignored
,
jlong
handle
,
jlong
handle
,
jlong
timeout
)
jlong
timeout
Millis
)
{
{
HANDLE
events
[
2
];
HANDLE
events
[
2
];
DWORD
dwTimeout
=
(
DWORD
)
timeout
;
DWORD
dwTimeout
=
(
DWORD
)
timeout
Millis
;
DWORD
result
;
DWORD
result
;
events
[
0
]
=
(
HANDLE
)
handle
;
events
[
0
]
=
(
HANDLE
)
handle
;
events
[
1
]
=
JVM_GetThreadInterruptEvent
();
events
[
1
]
=
JVM_GetThreadInterruptEvent
();
...
...
test/java/lang/ProcessBuilder/Basic.java
浏览文件 @
2fa31573
...
@@ -2316,6 +2316,7 @@ public class Basic {
...
@@ -2316,6 +2316,7 @@ public class Basic {
public
void
run
()
{
public
void
run
()
{
try
{
try
{
aboutToWaitFor
.
countDown
();
aboutToWaitFor
.
countDown
();
Thread
.
currentThread
().
interrupt
();
boolean
result
=
p
.
waitFor
(
30L
*
1000L
,
TimeUnit
.
MILLISECONDS
);
boolean
result
=
p
.
waitFor
(
30L
*
1000L
,
TimeUnit
.
MILLISECONDS
);
fail
(
"waitFor() wasn't interrupted, its return value was: "
+
result
);
fail
(
"waitFor() wasn't interrupted, its return value was: "
+
result
);
}
catch
(
InterruptedException
success
)
{
}
catch
(
InterruptedException
success
)
{
...
@@ -2325,7 +2326,38 @@ public class Basic {
...
@@ -2325,7 +2326,38 @@ public class Basic {
thread
.
start
();
thread
.
start
();
aboutToWaitFor
.
await
();
aboutToWaitFor
.
await
();
Thread
.
sleep
(
1000
);
thread
.
interrupt
();
thread
.
join
(
10L
*
1000L
);
check
(
millisElapsedSince
(
start
)
<
10L
*
1000L
);
check
(!
thread
.
isAlive
());
p
.
destroy
();
}
catch
(
Throwable
t
)
{
unexpected
(
t
);
}
//----------------------------------------------------------------
// Check that Process.waitFor(Long.MAX_VALUE, TimeUnit.MILLISECONDS)
// interrupt works as expected, if interrupted while waiting.
//----------------------------------------------------------------
try
{
List
<
String
>
childArgs
=
new
ArrayList
<
String
>(
javaChildArgs
);
childArgs
.
add
(
"sleep"
);
final
Process
p
=
new
ProcessBuilder
(
childArgs
).
start
();
final
long
start
=
System
.
nanoTime
();
final
CountDownLatch
aboutToWaitFor
=
new
CountDownLatch
(
1
);
final
Thread
thread
=
new
Thread
()
{
public
void
run
()
{
try
{
aboutToWaitFor
.
countDown
();
Thread
.
currentThread
().
interrupt
();
boolean
result
=
p
.
waitFor
(
Long
.
MAX_VALUE
,
TimeUnit
.
MILLISECONDS
);
fail
(
"waitFor() wasn't interrupted, its return value was: "
+
result
);
}
catch
(
InterruptedException
success
)
{
}
catch
(
Throwable
t
)
{
unexpected
(
t
);
}
}
};
thread
.
start
();
aboutToWaitFor
.
await
();
thread
.
interrupt
();
thread
.
interrupt
();
thread
.
join
(
10L
*
1000L
);
thread
.
join
(
10L
*
1000L
);
check
(
millisElapsedSince
(
start
)
<
10L
*
1000L
);
check
(
millisElapsedSince
(
start
)
<
10L
*
1000L
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录