Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
fba82c7c
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看板
提交
fba82c7c
编写于
3月 02, 2014
作者:
C
chegar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8035897: Better memory allocation for file descriptors greater than 1024 on macosx
Reviewed-by: michaelm, alanb
上级
e13ecc4c
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
123 addition
and
18 deletion
+123
-18
src/solaris/native/java/net/PlainDatagramSocketImpl.c
src/solaris/native/java/net/PlainDatagramSocketImpl.c
+8
-4
src/solaris/native/java/net/PlainSocketImpl.c
src/solaris/native/java/net/PlainSocketImpl.c
+3
-3
src/solaris/native/java/net/SocketInputStream.c
src/solaris/native/java/net/SocketInputStream.c
+4
-2
src/solaris/native/java/net/bsd_close.c
src/solaris/native/java/net/bsd_close.c
+27
-7
src/solaris/native/java/net/linux_close.c
src/solaris/native/java/net/linux_close.c
+3
-2
test/java/net/ServerSocket/AnotherSelectFdsLimit.java
test/java/net/ServerSocket/AnotherSelectFdsLimit.java
+78
-0
未找到文件。
src/solaris/native/java/net/PlainDatagramSocketImpl.c
浏览文件 @
fba82c7c
...
@@ -509,7 +509,8 @@ Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
...
@@ -509,7 +509,8 @@ Java_java_net_PlainDatagramSocketImpl_peek(JNIEnv *env, jobject this,
JNU_ThrowNullPointerException
(
env
,
"Null address in peek()"
);
JNU_ThrowNullPointerException
(
env
,
"Null address in peek()"
);
}
}
if
(
timeout
)
{
if
(
timeout
)
{
int
ret
=
NET_Timeout
(
fd
,
timeout
);
int
ret
=
NET_Timeout
(
env
,
fd
,
timeout
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
"Peek timed out"
);
"Peek timed out"
);
...
@@ -611,7 +612,8 @@ Java_java_net_PlainDatagramSocketImpl_peekData(JNIEnv *env, jobject this,
...
@@ -611,7 +612,8 @@ Java_java_net_PlainDatagramSocketImpl_peekData(JNIEnv *env, jobject this,
packetBufferOffset
=
(
*
env
)
->
GetIntField
(
env
,
packet
,
dp_offsetID
);
packetBufferOffset
=
(
*
env
)
->
GetIntField
(
env
,
packet
,
dp_offsetID
);
packetBufferLen
=
(
*
env
)
->
GetIntField
(
env
,
packet
,
dp_bufLengthID
);
packetBufferLen
=
(
*
env
)
->
GetIntField
(
env
,
packet
,
dp_bufLengthID
);
if
(
timeout
)
{
if
(
timeout
)
{
int
ret
=
NET_Timeout
(
fd
,
timeout
);
int
ret
=
NET_Timeout
(
env
,
fd
,
timeout
);
JNU_CHECK_EXCEPTION_RETURN
(
env
,
-
1
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
"Receive timed out"
);
"Receive timed out"
);
...
@@ -829,9 +831,11 @@ Java_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
...
@@ -829,9 +831,11 @@ Java_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
retry
=
JNI_FALSE
;
retry
=
JNI_FALSE
;
if
(
timeout
)
{
if
(
timeout
)
{
int
ret
=
NET_Timeout
(
fd
,
timeout
);
int
ret
=
NET_Timeout
(
env
,
fd
,
timeout
);
if
(
ret
<=
0
)
{
if
(
ret
<=
0
)
{
if
(
ret
==
0
)
{
if
((
*
env
)
->
ExceptionCheck
(
env
))
{
// fall-through, to potentially free, then return
}
else
if
(
ret
==
0
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
"Receive timed out"
);
"Receive timed out"
);
}
else
if
(
ret
==
JVM_IO_ERR
)
{
}
else
if
(
ret
==
JVM_IO_ERR
)
{
...
...
src/solaris/native/java/net/PlainSocketImpl.c
浏览文件 @
fba82c7c
...
@@ -704,11 +704,11 @@ Java_java_net_PlainSocketImpl_socketAccept(JNIEnv *env, jobject this,
...
@@ -704,11 +704,11 @@ Java_java_net_PlainSocketImpl_socketAccept(JNIEnv *env, jobject this,
/* passing a timeout of 0 to poll will return immediately,
/* passing a timeout of 0 to poll will return immediately,
but in the case of ServerSocket 0 means infinite. */
but in the case of ServerSocket 0 means infinite. */
if
(
timeout
<=
0
)
{
if
(
timeout
<=
0
)
{
ret
=
NET_Timeout
(
fd
,
-
1
);
ret
=
NET_Timeout
(
env
,
fd
,
-
1
);
}
else
{
}
else
{
ret
=
NET_Timeout
(
fd
,
timeout
);
ret
=
NET_Timeout
(
env
,
fd
,
timeout
);
}
}
JNU_CHECK_EXCEPTION
(
env
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
"Accept timed out"
);
"Accept timed out"
);
...
...
src/solaris/native/java/net/SocketInputStream.c
浏览文件 @
fba82c7c
...
@@ -100,9 +100,11 @@ Java_java_net_SocketInputStream_socketRead0(JNIEnv *env, jobject this,
...
@@ -100,9 +100,11 @@ Java_java_net_SocketInputStream_socketRead0(JNIEnv *env, jobject this,
}
}
if
(
timeout
)
{
if
(
timeout
)
{
nread
=
NET_Timeout
(
fd
,
timeout
);
nread
=
NET_Timeout
(
env
,
fd
,
timeout
);
if
(
nread
<=
0
)
{
if
(
nread
<=
0
)
{
if
(
nread
==
0
)
{
if
((
*
env
)
->
ExceptionCheck
(
env
))
{
// fall-through, to potentially free, then return
}
else
if
(
nread
==
0
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketTimeoutException"
,
"Read timed out"
);
"Read timed out"
);
}
else
if
(
nread
==
JVM_IO_ERR
)
{
}
else
if
(
nread
==
JVM_IO_ERR
)
{
...
...
src/solaris/native/java/net/bsd_close.c
浏览文件 @
fba82c7c
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <sys/param.h>
#include <signal.h>
#include <signal.h>
#include <pthread.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/types.h>
...
@@ -35,9 +36,10 @@
...
@@ -35,9 +36,10 @@
#include <sys/uio.h>
#include <sys/uio.h>
#include <unistd.h>
#include <unistd.h>
#include <errno.h>
#include <errno.h>
#include <sys/poll.h>
#include <sys/poll.h>
#include "jni_util.h"
/*
/*
* Stack allocated by thread when doing blocking operation
* Stack allocated by thread when doing blocking operation
*/
*/
...
@@ -344,9 +346,13 @@ int NET_Select(int s, fd_set *readfds, fd_set *writefds,
...
@@ -344,9 +346,13 @@ int NET_Select(int s, fd_set *readfds, fd_set *writefds,
* Auto restarts with adjusted timeout if interrupted by
* Auto restarts with adjusted timeout if interrupted by
* signal other than our wakeup signal.
* signal other than our wakeup signal.
*/
*/
int
NET_Timeout
(
int
s
,
long
timeout
)
{
int
NET_Timeout
(
JNIEnv
*
env
,
int
s
,
long
timeout
)
{
long
prevtime
=
0
,
newtime
;
long
prevtime
=
0
,
newtime
;
struct
timeval
t
,
*
tp
=
&
t
;
struct
timeval
t
,
*
tp
=
&
t
;
fd_set
fds
;
fd_set
*
fdsp
=
NULL
;
int
allocated
=
0
;
threadEntry_t
self
;
fdEntry_t
*
fdEntry
=
getFdEntry
(
s
);
fdEntry_t
*
fdEntry
=
getFdEntry
(
s
);
/*
/*
...
@@ -376,20 +382,30 @@ int NET_Timeout(int s, long timeout) {
...
@@ -376,20 +382,30 @@ int NET_Timeout(int s, long timeout) {
t
.
tv_usec
=
0
;
t
.
tv_usec
=
0
;
}
}
if
(
s
<
FD_SETSIZE
)
{
fdsp
=
&
fds
;
FD_ZERO
(
fdsp
);
}
else
{
int
length
=
(
howmany
(
s
+
1
,
NFDBITS
))
*
sizeof
(
int
);
fdsp
=
(
fd_set
*
)
calloc
(
1
,
length
);
if
(
fdsp
==
NULL
)
{
JNU_ThrowOutOfMemoryError
(
env
,
"NET_Select native heap allocation failed"
);
return
0
;
}
allocated
=
1
;
}
FD_SET
(
s
,
fdsp
);
for
(;;)
{
for
(;;)
{
fd_set
rfds
;
int
rv
;
int
rv
;
threadEntry_t
self
;
/*
/*
* call select on the fd. If interrupted by our wakeup signal
* call select on the fd. If interrupted by our wakeup signal
* errno will be set to EBADF.
* errno will be set to EBADF.
*/
*/
FD_ZERO
(
&
rfds
);
FD_SET
(
s
,
&
rfds
);
startOp
(
fdEntry
,
&
self
);
startOp
(
fdEntry
,
&
self
);
rv
=
select
(
s
+
1
,
&
rfds
,
0
,
0
,
tp
);
rv
=
select
(
s
+
1
,
fdsp
,
0
,
0
,
tp
);
endOp
(
fdEntry
,
&
self
);
endOp
(
fdEntry
,
&
self
);
/*
/*
...
@@ -403,6 +419,8 @@ int NET_Timeout(int s, long timeout) {
...
@@ -403,6 +419,8 @@ int NET_Timeout(int s, long timeout) {
newtime
=
now
.
tv_sec
*
1000
+
now
.
tv_usec
/
1000
;
newtime
=
now
.
tv_sec
*
1000
+
now
.
tv_usec
/
1000
;
timeout
-=
newtime
-
prevtime
;
timeout
-=
newtime
-
prevtime
;
if
(
timeout
<=
0
)
{
if
(
timeout
<=
0
)
{
if
(
allocated
!=
0
)
free
(
fdsp
);
return
0
;
return
0
;
}
}
prevtime
=
newtime
;
prevtime
=
newtime
;
...
@@ -410,6 +428,8 @@ int NET_Timeout(int s, long timeout) {
...
@@ -410,6 +428,8 @@ int NET_Timeout(int s, long timeout) {
t
.
tv_usec
=
(
timeout
%
1000
)
*
1000
;
t
.
tv_usec
=
(
timeout
%
1000
)
*
1000
;
}
}
}
else
{
}
else
{
if
(
allocated
!=
0
)
free
(
fdsp
);
return
rv
;
return
rv
;
}
}
...
...
src/solaris/native/java/net/linux_close.c
浏览文件 @
fba82c7c
...
@@ -34,9 +34,10 @@
...
@@ -34,9 +34,10 @@
#include <sys/uio.h>
#include <sys/uio.h>
#include <unistd.h>
#include <unistd.h>
#include <errno.h>
#include <errno.h>
#include <sys/poll.h>
#include <sys/poll.h>
#include "jni.h"
/*
/*
* Stack allocated by thread when doing blocking operation
* Stack allocated by thread when doing blocking operation
*/
*/
...
@@ -325,7 +326,7 @@ int NET_Select(int s, fd_set *readfds, fd_set *writefds,
...
@@ -325,7 +326,7 @@ int NET_Select(int s, fd_set *readfds, fd_set *writefds,
* Auto restarts with adjusted timeout if interrupted by
* Auto restarts with adjusted timeout if interrupted by
* signal other than our wakeup signal.
* signal other than our wakeup signal.
*/
*/
int
NET_Timeout
(
int
s
,
long
timeout
)
{
int
NET_Timeout
(
JNIEnv
*
unused
,
int
s
,
long
timeout
)
{
long
prevtime
=
0
,
newtime
;
long
prevtime
=
0
,
newtime
;
struct
timeval
t
;
struct
timeval
t
;
fdEntry_t
*
fdEntry
=
getFdEntry
(
s
);
fdEntry_t
*
fdEntry
=
getFdEntry
(
s
);
...
...
test/java/net/ServerSocket/AnotherSelectFdsLimit.java
0 → 100644
浏览文件 @
fba82c7c
/*
* Copyright (c) 2014, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8035897
* @summary FD_SETSIZE should be set on macosx
* @run main/othervm AnotherSelectFdsLimit 1023
* @run main/othervm AnotherSelectFdsLimit 1024
* @run main/othervm AnotherSelectFdsLimit 1025
* @run main/othervm AnotherSelectFdsLimit 1600
*/
import
java.io.IOException
;
import
java.net.ServerSocket
;
import
java.net.SocketTimeoutException
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
AnotherSelectFdsLimit
{
static
final
int
DEFAULT_FDS_TO_USE
=
1600
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
if
(!
System
.
getProperty
(
"os.name"
).
contains
(
"OS X"
))
{
System
.
out
.
println
(
"Test only run on MAC. Exiting."
);
return
;
}
int
fdsToUse
=
DEFAULT_FDS_TO_USE
;
if
(
args
.
length
==
1
)
fdsToUse
=
Integer
.
parseInt
(
args
[
0
]);
System
.
out
.
println
(
"Using "
+
fdsToUse
+
" fds."
);
List
<
Thread
>
threads
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
fdsToUse
;
i
++)
threads
.
add
(
new
WorkerThread
());
for
(
Thread
t
:
threads
)
t
.
start
();
for
(
Thread
t
:
threads
)
t
.
join
();
}
static
class
WorkerThread
extends
Thread
{
public
void
run
()
{
try
(
ServerSocket
ss
=
new
ServerSocket
(
0
))
{
ss
.
setSoTimeout
(
2000
);
ss
.
accept
();
}
catch
(
SocketTimeoutException
x
)
{
// expected
}
catch
(
IOException
x
)
{
throw
new
java
.
io
.
UncheckedIOException
(
x
);
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录