Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
c107ed25
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
c107ed25
编写于
3月 01, 2020
作者:
A
alexey-milovidov
提交者:
GitHub
3月 01, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #9457 from ClickHouse/profiler-save-errno
Save errno in signal handlers
上级
5b4b40f8
7c13b65e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
16 addition
and
0 deletion
+16
-0
base/daemon/src/BaseDaemon.cpp
base/daemon/src/BaseDaemon.cpp
+8
-0
dbms/src/Common/QueryProfiler.cpp
dbms/src/Common/QueryProfiler.cpp
+4
-0
dbms/src/Storages/System/StorageSystemStackTrace.cpp
dbms/src/Storages/System/StorageSystemStackTrace.cpp
+4
-0
未找到文件。
base/daemon/src/BaseDaemon.cpp
浏览文件 @
c107ed25
...
...
@@ -88,10 +88,14 @@ using signal_function = void(int, siginfo_t*, void*);
static
void
writeSignalIDtoSignalPipe
(
int
sig
)
{
auto
saved_errno
=
errno
;
/// We must restore previous value of errno in signal handler.
char
buf
[
buf_size
];
DB
::
WriteBufferFromFileDescriptor
out
(
signal_pipe
.
fds_rw
[
1
],
buf_size
,
buf
);
DB
::
writeBinary
(
sig
,
out
);
out
.
next
();
errno
=
saved_errno
;
}
/** Signal handler for HUP / USR1 */
...
...
@@ -110,6 +114,8 @@ static void terminateRequestedSignalHandler(int sig, siginfo_t * info, void * co
*/
static
void
signalHandler
(
int
sig
,
siginfo_t
*
info
,
void
*
context
)
{
auto
saved_errno
=
errno
;
/// We must restore previous value of errno in signal handler.
char
buf
[
buf_size
];
DB
::
WriteBufferFromFileDescriptorDiscardOnFailure
out
(
signal_pipe
.
fds_rw
[
1
],
buf_size
,
buf
);
...
...
@@ -134,6 +140,8 @@ static void signalHandler(int sig, siginfo_t * info, void * context)
::
sleep
(
10
);
call_default_signal_handler
(
sig
);
}
errno
=
saved_errno
;
}
...
...
dbms/src/Common/QueryProfiler.cpp
浏览文件 @
c107ed25
...
...
@@ -21,6 +21,8 @@ namespace
{
void
writeTraceInfo
(
TraceType
trace_type
,
int
/* sig */
,
siginfo_t
*
info
,
void
*
context
)
{
auto
saved_errno
=
errno
;
/// We must restore previous value of errno in signal handler.
int
overrun_count
=
0
;
#if defined(OS_LINUX)
if
(
info
)
...
...
@@ -33,6 +35,8 @@ namespace
const
StackTrace
stack_trace
(
signal_context
);
ext
::
Singleton
<
TraceCollector
>
()
->
collect
(
trace_type
,
stack_trace
,
overrun_count
);
errno
=
saved_errno
;
}
[[
maybe_unused
]]
const
UInt32
TIMER_PRECISION
=
1e9
;
...
...
dbms/src/Storages/System/StorageSystemStackTrace.cpp
浏览文件 @
c107ed25
...
...
@@ -47,6 +47,8 @@ namespace
void
signalHandler
(
int
,
siginfo_t
*
info
,
void
*
context
)
{
auto
saved_errno
=
errno
;
/// We must restore previous value of errno in signal handler.
/// In case malicious user is sending signals manually (for unknown reason).
/// If we don't check - it may break our synchronization.
if
(
info
->
si_pid
!=
expected_pid
)
...
...
@@ -69,6 +71,8 @@ namespace
/// We cannot do anything if write failed.
(
void
)
res
;
errno
=
saved_errno
;
}
/// Wait for data in pipe and read it.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录