Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Achou.Wang
accel-ppp
提交
d30c909b
A
accel-ppp
项目概览
Achou.Wang
/
accel-ppp
通知
6
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
accel-ppp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d30c909b
编写于
10月 16, 2013
作者:
D
Dmitry Kozlov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rewrite restart procedure
Signed-off-by:
N
Dmitry Kozlov
<
xeb@mail.ru
>
上级
2598be10
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
50 deletion
+20
-50
accel-pppd/main.c
accel-pppd/main.c
+20
-50
未找到文件。
accel-pppd/main.c
浏览文件 @
d30c909b
...
...
@@ -12,6 +12,7 @@
#include <pthread.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/wait.h>
#include <sys/resource.h>
#ifdef CRYPTO_OPENSSL
...
...
@@ -33,6 +34,8 @@ static char *pid_file;
static
char
*
conf_file
;
static
char
*
conf_dump
;
static
sigset_t
orig_set
;
static
char
**
argv
;
static
int
argc
;
#ifdef CRYPTO_OPENSSL
#include <openssl/ssl.h>
...
...
@@ -75,7 +78,6 @@ static void change_limits(void)
{
FILE
*
f
;
struct
rlimit
lim
;
unsigned
int
file_max
=
1024
*
1024
;
unsigned
int
nr_open
=
1024
*
1024
;
f
=
fopen
(
"/proc/sys/fs/nr_open"
,
"r"
);
...
...
@@ -84,17 +86,8 @@ static void change_limits(void)
fclose
(
f
);
}
f
=
fopen
(
"/proc/sys/fs/file-max"
,
"r"
);
if
(
f
)
{
fscanf
(
f
,
"%d"
,
&
file_max
);
fclose
(
f
);
}
if
(
file_max
>
nr_open
)
file_max
=
nr_open
;
lim
.
rlim_cur
=
file_max
;
lim
.
rlim_max
=
file_max
;
lim
.
rlim_cur
=
nr_open
;
lim
.
rlim_max
=
nr_open
;
if
(
setrlimit
(
RLIMIT_NOFILE
,
&
lim
))
log_emerg
(
"main: setrlimit: %s
\n
"
,
strerror
(
errno
));
}
...
...
@@ -110,7 +103,7 @@ static void config_reload(int num)
triton_conf_reload
(
config_reload_notify
);
}
/*
static void close_all_fd(void)
static
void
close_all_fd
(
void
)
{
DIR
*
dirp
;
struct
dirent
ent
,
*
res
;
...
...
@@ -135,56 +128,24 @@ static void config_reload(int num)
}
closedir
(
dirp
);
}
*/
}
void
core_restart
(
int
soft
)
{
char
fname
[
128
];
int
fd
,
n
,
f
=
0
;
char
cmdline
[
ARG_MAX
];
char
exe
[
PATH_MAX
];
char
*
argv
[
16
];
char
*
ptr
=
cmdline
,
*
endptr
;
if
(
soft
&&
fork
())
{
//close_all_fd();
return
;
}
pthread_sigmask
(
SIG_SETMASK
,
&
orig_set
,
NULL
);
sprintf
(
fname
,
"/proc/%i/cmdline"
,
getpid
());
fd
=
open
(
fname
,
O_RDONLY
);
n
=
read
(
fd
,
cmdline
,
ARG_MAX
);
endptr
=
ptr
+
n
;
n
=
0
;
while
(
ptr
<
endptr
&&
n
<
14
)
{
if
(
strcmp
(
ptr
,
"--internal"
))
argv
[
n
++
]
=
ptr
;
else
if
(
soft
)
{
f
=
1
;
argv
[
n
++
]
=
ptr
;
}
while
(
ptr
<
endptr
&&
*
ptr
++
);
}
#ifdef USE_BACKUP
if
(
soft
)
backup_restore_fd
();
else
#endif
close_all_fd
();
sprintf
(
exe
,
"/proc/%u/exe"
,
getpid
());
readlink
(
exe
,
exe
,
PATH_MAX
);
if
(
!
f
&&
soft
)
argv
[
n
++
]
=
"--internal"
;
argv
[
n
++
]
=
NULL
;
while
(
1
)
{
execv
(
exe
,
argv
);
sleep
(
3
);
...
...
@@ -197,6 +158,8 @@ static void sigsegv(int num)
char
fname
[
128
];
char
exec_file
[
PATH_MAX
];
struct
rlimit
lim
;
pid_t
pid
;
int
status
;
pthread_sigmask
(
SIG_SETMASK
,
&
orig_set
,
NULL
);
...
...
@@ -224,7 +187,11 @@ static void sigsegv(int num)
}
out:
core_restart
(
1
);
pid
=
fork
();
if
(
pid
)
{
waitpid
(
pid
,
&
status
,
0
);
core_restart
(
1
);
}
if
(
conf_dump
)
{
lim
.
rlim_cur
=
RLIM_INFINITY
;
...
...
@@ -236,7 +203,7 @@ out:
abort
();
}
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
_argc
,
char
**
_
argv
)
{
sigset_t
set
;
int
i
,
sig
,
goto_daemon
=
0
,
len
;
...
...
@@ -245,6 +212,9 @@ int main(int argc, char **argv)
int
pagesize
=
sysconf
(
_SC_PAGE_SIZE
);
int
internal
=
0
;
argc
=
_argc
;
argv
=
_argv
;
if
(
argc
<
2
)
goto
usage
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录