Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
bc6006bc
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看板
提交
bc6006bc
编写于
7月 15, 2015
作者:
A
asaha
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
5597a399
fee8f726
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
34 addition
and
4 deletion
+34
-4
make/hotspot_version
make/hotspot_version
+2
-2
src/os/bsd/vm/jsig.c
src/os/bsd/vm/jsig.c
+32
-2
未找到文件。
make/hotspot_version
浏览文件 @
bc6006bc
...
@@ -34,8 +34,8 @@
...
@@ -34,8 +34,8 @@
HOTSPOT_VM_COPYRIGHT=Copyright 2015
HOTSPOT_VM_COPYRIGHT=Copyright 2015
HS_MAJOR_VER=25
HS_MAJOR_VER=25
HS_MINOR_VER=6
0
HS_MINOR_VER=6
6
HS_BUILD_NUMBER=
23
HS_BUILD_NUMBER=
01
JDK_MAJOR_VER=1
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
JDK_MINOR_VER=8
...
...
src/os/bsd/vm/jsig.c
浏览文件 @
bc6006bc
/*
/*
* Copyright (c) 2001, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 201
5
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -36,6 +36,7 @@
...
@@ -36,6 +36,7 @@
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdbool.h>
#include <string.h>
#define MAXSIGNUM 32
#define MAXSIGNUM 32
#define MASK(sig) ((unsigned int)1 << sig)
#define MASK(sig) ((unsigned int)1 << sig)
...
@@ -43,6 +44,9 @@
...
@@ -43,6 +44,9 @@
static
struct
sigaction
sact
[
MAXSIGNUM
];
/* saved signal handlers */
static
struct
sigaction
sact
[
MAXSIGNUM
];
/* saved signal handlers */
static
unsigned
int
jvmsigs
=
0
;
/* signals used by jvm */
static
unsigned
int
jvmsigs
=
0
;
/* signals used by jvm */
static
pthread_key_t
reentry_flag_key
;
static
pthread_once_t
reentry_key_init_once
=
PTHREAD_ONCE_INIT
;
/* used to synchronize the installation of signal handlers */
/* used to synchronize the installation of signal handlers */
static
pthread_mutex_t
mutex
=
PTHREAD_MUTEX_INITIALIZER
;
static
pthread_mutex_t
mutex
=
PTHREAD_MUTEX_INITIALIZER
;
static
pthread_cond_t
cond
=
PTHREAD_COND_INITIALIZER
;
static
pthread_cond_t
cond
=
PTHREAD_COND_INITIALIZER
;
...
@@ -59,6 +63,15 @@ static sigaction_t os_sigaction = 0; /* os's version of sigaction() */
...
@@ -59,6 +63,15 @@ static sigaction_t os_sigaction = 0; /* os's version of sigaction() */
static
bool
jvm_signal_installing
=
false
;
static
bool
jvm_signal_installing
=
false
;
static
bool
jvm_signal_installed
=
false
;
static
bool
jvm_signal_installed
=
false
;
#define check_status(cmd) \
do { \
int status = (cmd); \
if (status != 0) { \
printf("error %s (%d) in " #cmd "\n", strerror(status), status); \
exit(1); \
} \
} while (0)
static
void
signal_lock
()
{
static
void
signal_lock
()
{
pthread_mutex_lock
(
&
mutex
);
pthread_mutex_lock
(
&
mutex
);
/* When the jvm is installing its set of signal handlers, threads
/* When the jvm is installing its set of signal handlers, threads
...
@@ -74,8 +87,15 @@ static void signal_unlock() {
...
@@ -74,8 +87,15 @@ static void signal_unlock() {
pthread_mutex_unlock
(
&
mutex
);
pthread_mutex_unlock
(
&
mutex
);
}
}
static
void
reentry_tls_init
()
{
// value for reentry_flag_key will default to NULL (false)
check_status
(
pthread_key_create
(
&
reentry_flag_key
,
NULL
));
}
static
sa_handler_t
call_os_signal
(
int
sig
,
sa_handler_t
disp
,
static
sa_handler_t
call_os_signal
(
int
sig
,
sa_handler_t
disp
,
bool
is_sigset
)
{
bool
is_sigset
)
{
sa_handler_t
res
;
if
(
os_signal
==
NULL
)
{
if
(
os_signal
==
NULL
)
{
if
(
!
is_sigset
)
{
if
(
!
is_sigset
)
{
os_signal
=
(
signal_t
)
dlsym
(
RTLD_NEXT
,
"signal"
);
os_signal
=
(
signal_t
)
dlsym
(
RTLD_NEXT
,
"signal"
);
...
@@ -87,7 +107,12 @@ static sa_handler_t call_os_signal(int sig, sa_handler_t disp,
...
@@ -87,7 +107,12 @@ static sa_handler_t call_os_signal(int sig, sa_handler_t disp,
exit
(
0
);
exit
(
0
);
}
}
}
}
return
(
*
os_signal
)(
sig
,
disp
);
check_status
(
pthread_once
(
&
reentry_key_init_once
,
reentry_tls_init
));
// set reentry_flag_key to non-NULL to show reentry
check_status
(
pthread_setspecific
(
reentry_flag_key
,
&
res
));
res
=
(
*
os_signal
)(
sig
,
disp
);
check_status
(
pthread_setspecific
(
reentry_flag_key
,
NULL
));
return
res
;
}
}
static
void
save_signal_handler
(
int
sig
,
sa_handler_t
disp
)
{
static
void
save_signal_handler
(
int
sig
,
sa_handler_t
disp
)
{
...
@@ -161,6 +186,11 @@ int sigaction(int sig, const struct sigaction *act, struct sigaction *oact) {
...
@@ -161,6 +186,11 @@ int sigaction(int sig, const struct sigaction *act, struct sigaction *oact) {
bool
sigused
;
bool
sigused
;
struct
sigaction
oldAct
;
struct
sigaction
oldAct
;
check_status
(
pthread_once
(
&
reentry_key_init_once
,
reentry_tls_init
));
if
(
pthread_getspecific
(
reentry_flag_key
)
!=
NULL
)
{
return
call_os_sigaction
(
sig
,
act
,
oact
);
}
signal_lock
();
signal_lock
();
sigused
=
(
MASK
(
sig
)
&
jvmsigs
)
!=
0
;
sigused
=
(
MASK
(
sig
)
&
jvmsigs
)
!=
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录