Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
0208a658
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看板
提交
0208a658
编写于
4月 16, 2013
作者:
V
vinnie
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
731061d0
3011c0e5
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
110 addition
and
35 deletion
+110
-35
src/windows/classes/java/net/DualStackPlainSocketImpl.java
src/windows/classes/java/net/DualStackPlainSocketImpl.java
+2
-1
src/windows/native/java/net/SocketInputStream.c
src/windows/native/java/net/SocketInputStream.c
+29
-26
test/java/net/Socket/asyncClose/Race.java
test/java/net/Socket/asyncClose/Race.java
+3
-3
test/java/util/concurrent/CompletableFuture/Basic.java
test/java/util/concurrent/CompletableFuture/Basic.java
+76
-5
未找到文件。
src/windows/classes/java/net/DualStackPlainSocketImpl.java
浏览文件 @
0208a658
...
...
@@ -152,8 +152,9 @@ class DualStackPlainSocketImpl extends AbstractPlainSocketImpl
if
(!
fd
.
valid
())
return
;
close0
(
fdAccess
.
get
(
fd
)
);
final
int
nativefd
=
fdAccess
.
get
(
fd
);
fdAccess
.
set
(
fd
,
-
1
);
close0
(
nativefd
);
}
void
socketShutdown
(
int
howto
)
throws
IOException
{
...
...
src/windows/native/java/net/SocketInputStream.c
浏览文件 @
0208a658
...
...
@@ -134,32 +134,35 @@ Java_java_net_SocketInputStream_socketRead0(JNIEnv *env, jobject this,
(
*
env
)
->
SetByteArrayRegion
(
env
,
data
,
off
,
nread
,
(
jbyte
*
)
bufP
);
}
else
{
if
(
nread
<
0
)
{
/*
* Recv failed.
*/
switch
(
WSAGetLastError
())
{
case
WSAEINTR
:
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"socket closed"
);
break
;
case
WSAECONNRESET
:
case
WSAESHUTDOWN
:
/*
* Connection has been reset - Windows sometimes reports
* the reset as a shutdown error.
*/
JNU_ThrowByName
(
env
,
"sun/net/ConnectionResetException"
,
""
);
break
;
case
WSAETIMEDOUT
:
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
"Read timed out"
);
break
;
default:
NET_ThrowCurrent
(
env
,
"recv failed"
);
// Check if the socket has been closed since we last checked.
// This could be a reason for recv failing.
if
((
*
env
)
->
GetIntField
(
env
,
fdObj
,
IO_fd_fdID
)
==
-
1
)
{
NET_ThrowSocketException
(
env
,
"Socket closed"
);
}
else
{
switch
(
WSAGetLastError
())
{
case
WSAEINTR
:
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"socket closed"
);
break
;
case
WSAECONNRESET
:
case
WSAESHUTDOWN
:
/*
* Connection has been reset - Windows sometimes reports
* the reset as a shutdown error.
*/
JNU_ThrowByName
(
env
,
"sun/net/ConnectionResetException"
,
""
);
break
;
case
WSAETIMEDOUT
:
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
"Read timed out"
);
break
;
default:
NET_ThrowCurrent
(
env
,
"recv failed"
);
}
}
}
}
...
...
test/java/net/Socket/asyncClose/Race.java
浏览文件 @
0208a658
...
...
@@ -23,8 +23,8 @@
/*
* @test
* @bug 8006395
* @summary
Race in async socket close on Linux
* @bug 8006395
8012244
* @summary
Tests racing code that reads and closes a Socket
*/
import
java.io.InputStream
;
...
...
@@ -58,7 +58,7 @@ public class Race {
Thread
.
sleep
(
50
);
}
catch
(
Exception
x
)
{
if
(!(
x
instanceof
SocketException
&&
x
.
getMessage
().
equals
(
"S
ocket closed"
)))
&&
x
.
getMessage
().
equals
IgnoreCase
(
"s
ocket closed"
)))
x
.
printStackTrace
();
// ok, expect Socket closed
}
...
...
test/java/util/concurrent/CompletableFuture/Basic.java
浏览文件 @
0208a658
...
...
@@ -504,7 +504,7 @@ public class Basic {
cf1
=
supplyAsync
(()
->
{
throw
new
RuntimeException
();
});
cf2
=
supplyAsync
(()
->
2
);
cf3
=
cf1
.
applyToEither
(
cf2
,
(
x
)
->
{
check
(
x
==
2
);
return
x
;
});
try
{
check
(
cf3
.
join
()
==
1
);
}
catch
(
CompletionException
x
)
{
pass
();
}
try
{
check
(
cf3
.
join
()
==
2
);
}
catch
(
CompletionException
x
)
{
pass
();
}
check
(
cf3
.
isDone
());
check
(
cf1
.
isDone
()
||
cf2
.
isDone
());
...
...
@@ -520,6 +520,27 @@ public class Basic {
cf3
=
cf1
.
applyToEitherAsync
(
cf2
,
(
x
)
->
{
fail
();
return
x
;
});
checkCompletedExceptionally
(
cf3
);
check
(
cf1
.
isDone
()
||
cf2
.
isDone
());
final
Phaser
cf3Done
=
new
Phaser
(
2
);
cf1
=
supplyAsync
(()
->
{
cf3Done
.
arriveAndAwaitAdvance
();
return
1
;
});
cf2
=
supplyAsync
(()
->
2
);
cf3
=
cf1
.
applyToEither
(
cf2
,
(
x
)
->
{
check
(
x
==
2
);
return
x
;
});
checkCompletedNormally
(
cf3
,
2
);
checkCompletedNormally
(
cf2
,
2
);
check
(!
cf1
.
isDone
());
cf3Done
.
arrive
();
checkCompletedNormally
(
cf1
,
1
);
checkCompletedNormally
(
cf3
,
2
);
cf1
=
supplyAsync
(()
->
1
);
cf2
=
supplyAsync
(()
->
{
cf3Done
.
arriveAndAwaitAdvance
();
return
2
;
});
cf3
=
cf1
.
applyToEitherAsync
(
cf2
,
(
x
)
->
{
check
(
x
==
1
);
return
x
;
});
checkCompletedNormally
(
cf3
,
1
);
checkCompletedNormally
(
cf1
,
1
);
check
(!
cf2
.
isDone
());
cf3Done
.
arrive
();
checkCompletedNormally
(
cf2
,
2
);
checkCompletedNormally
(
cf3
,
1
);
}
catch
(
Throwable
t
)
{
unexpected
(
t
);
}
//----------------------------------------------------------------
...
...
@@ -570,6 +591,27 @@ public class Basic {
cf3
=
cf2
.
acceptEitherAsync
(
cf1
,
(
x
)
->
{
fail
();
});
checkCompletedExceptionally
(
cf3
);
check
(
cf1
.
isDone
()
||
cf2
.
isDone
());
final
Phaser
cf3Done
=
new
Phaser
(
2
);
cf1
=
supplyAsync
(()
->
{
cf3Done
.
arriveAndAwaitAdvance
();
return
1
;
});
cf2
=
supplyAsync
(()
->
2
);
cf3
=
cf1
.
acceptEither
(
cf2
,
(
x
)
->
{
check
(
x
==
2
);
});
checkCompletedNormally
(
cf3
,
null
);
checkCompletedNormally
(
cf2
,
2
);
check
(!
cf1
.
isDone
());
cf3Done
.
arrive
();
checkCompletedNormally
(
cf1
,
1
);
checkCompletedNormally
(
cf3
,
null
);
cf1
=
supplyAsync
(()
->
1
);
cf2
=
supplyAsync
(()
->
{
cf3Done
.
arriveAndAwaitAdvance
();
return
2
;
});
cf3
=
cf1
.
acceptEitherAsync
(
cf2
,
(
x
)
->
{
check
(
x
==
1
);
});
checkCompletedNormally
(
cf3
,
null
);
checkCompletedNormally
(
cf1
,
1
);
check
(!
cf2
.
isDone
());
cf3Done
.
arrive
();
checkCompletedNormally
(
cf2
,
2
);
checkCompletedNormally
(
cf3
,
null
);
}
catch
(
Throwable
t
)
{
unexpected
(
t
);
}
//----------------------------------------------------------------
...
...
@@ -605,19 +647,23 @@ public class Basic {
cf1
=
runAsync
(()
->
{
throw
new
RuntimeException
();
});
cf2
=
runAsync
(()
->
{
});
cf3
=
cf2
.
runAfterEither
(
cf1
,
()
->
{
atomicInt
.
incrementAndGet
();
});
try
{
check
(
cf3
.
join
()
==
null
);
}
catch
(
CompletionException
x
)
{
pass
();
}
try
{
check
(
cf3
.
join
()
==
null
);
check
(
atomicInt
.
get
()
==
(
before
+
1
));
}
catch
(
CompletionException
x
)
{
pass
();
}
check
(
cf3
.
isDone
());
check
(
cf1
.
isDone
()
||
cf2
.
isDone
());
check
(
atomicInt
.
get
()
==
(
before
+
1
));
before
=
atomicInt
.
get
();
cf1
=
runAsync
(()
->
{
});
cf2
=
runAsync
(()
->
{
throw
new
RuntimeException
();
});
cf3
=
cf1
.
runAfterEitherAsync
(
cf2
,
()
->
{
atomicInt
.
incrementAndGet
();
});
try
{
check
(
cf3
.
join
()
==
null
);
}
catch
(
CompletionException
x
)
{
pass
();
}
try
{
check
(
cf3
.
join
()
==
null
);
check
(
atomicInt
.
get
()
==
(
before
+
1
));
}
catch
(
CompletionException
x
)
{
pass
();
}
check
(
cf3
.
isDone
());
check
(
cf1
.
isDone
()
||
cf2
.
isDone
());
check
(
atomicInt
.
get
()
==
(
before
+
1
));
before
=
atomicInt
.
get
();
cf1
=
runAsync
(()
->
{
throw
new
RuntimeException
();
});
...
...
@@ -626,6 +672,31 @@ public class Basic {
checkCompletedExceptionally
(
cf3
);
check
(
cf1
.
isDone
()
||
cf2
.
isDone
());
check
(
atomicInt
.
get
()
==
before
);
final
Phaser
cf3Done
=
new
Phaser
(
2
);
before
=
atomicInt
.
get
();
cf1
=
runAsync
(()
->
{
cf3Done
.
arriveAndAwaitAdvance
();
});
cf2
=
runAsync
(()
->
{
});
cf3
=
cf1
.
runAfterEither
(
cf2
,
()
->
{
atomicInt
.
incrementAndGet
();
});
checkCompletedNormally
(
cf3
,
null
);
checkCompletedNormally
(
cf2
,
null
);
check
(!
cf1
.
isDone
());
check
(
atomicInt
.
get
()
==
(
before
+
1
));
cf3Done
.
arrive
();
checkCompletedNormally
(
cf1
,
null
);
checkCompletedNormally
(
cf3
,
null
);
before
=
atomicInt
.
get
();
cf1
=
runAsync
(()
->
{
});
cf2
=
runAsync
(()
->
{
cf3Done
.
arriveAndAwaitAdvance
();
});
cf3
=
cf1
.
runAfterEitherAsync
(
cf2
,
()
->
{
atomicInt
.
incrementAndGet
();
});
checkCompletedNormally
(
cf3
,
null
);
checkCompletedNormally
(
cf1
,
null
);
check
(!
cf2
.
isDone
());
check
(
atomicInt
.
get
()
==
(
before
+
1
));
cf3Done
.
arrive
();
checkCompletedNormally
(
cf2
,
null
);
checkCompletedNormally
(
cf3
,
null
);
}
catch
(
Throwable
t
)
{
unexpected
(
t
);
}
//----------------------------------------------------------------
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录