Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
90944de1
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
90944de1
编写于
1月 27, 2021
作者:
S
Shengliang Guan
提交者:
GitHub
1月 27, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5051 from freemine/mac
sem_timedwait porting issue
上级
a6cbb444
9dcee4f8
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
25 addition
and
29 deletion
+25
-29
src/dnode/src/dnodeTelemetry.c
src/dnode/src/dnodeTelemetry.c
+25
-29
未找到文件。
src/dnode/src/dnodeTelemetry.c
浏览文件 @
90944de1
...
...
@@ -31,7 +31,11 @@
#include "mnodeAcct.h"
#include "dnodeTelemetry.h"
static
tsem_t
tsExitSem
;
// sem_timedwait is NOT implemented on MacOSX
// thus, we use pthread_mutex_t/pthread_cond_t to simulate
static
pthread_mutex_t
tsExitLock
=
PTHREAD_MUTEX_INITIALIZER
;
static
pthread_cond_t
tsExitCond
=
PTHREAD_COND_INITIALIZER
;
static
volatile
int
tsExit
=
0
;
static
pthread_t
tsTelemetryThread
;
#define TELEMETRY_SERVER "telemetry.taosdata.com"
...
...
@@ -236,24 +240,19 @@ static void sendTelemetryReport() {
taosCloseSocket
(
fd
);
}
#ifdef __APPLE__
static
int
sem_timedwait
(
tsem_t
*
sem
,
struct
timespec
*
to
)
{
fprintf
(
stderr
,
"%s[%d]%s(): not implemented yet!
\n
"
,
basename
(
__FILE__
),
__LINE__
,
__func__
);
abort
();
}
#endif // __APPLE__
static
void
*
telemetryThread
(
void
*
param
)
{
struct
timespec
end
=
{
0
};
clock_gettime
(
CLOCK_REALTIME
,
&
end
);
end
.
tv_sec
+=
300
;
// wait 5 minutes before send first report
while
(
1
)
{
if
(
sem_timedwait
(
&
tsExitSem
,
&
end
)
==
0
)
{
break
;
}
else
if
(
errno
!=
ETIMEDOUT
)
{
continue
;
}
while
(
!
tsExit
)
{
int
r
=
0
;
struct
timespec
ts
=
end
;
pthread_mutex_lock
(
&
tsExitLock
);
r
=
pthread_cond_timedwait
(
&
tsExitCond
,
&
tsExitLock
,
&
ts
);
pthread_mutex_unlock
(
&
tsExitLock
);
if
(
r
==
0
)
break
;
if
(
r
!=
ETIMEDOUT
)
continue
;
if
(
sdbIsMaster
())
{
sendTelemetryReport
();
...
...
@@ -284,12 +283,6 @@ int32_t dnodeInitTelemetry() {
dnodeGetEmail
(
"/usr/local/taos/email"
);
if
(
tsem_init
(
&
tsExitSem
,
0
,
0
)
==
-
1
)
{
// just log the error, it is ok for telemetry to fail
dTrace
(
"failed to create semaphore for telemetry, reason:%s"
,
strerror
(
errno
));
return
0
;
}
pthread_attr_t
attr
;
pthread_attr_init
(
&
attr
);
pthread_attr_setdetachstate
(
&
attr
,
PTHREAD_CREATE_JOINABLE
);
...
...
@@ -310,8 +303,11 @@ void dnodeCleanupTelemetry() {
}
if
(
taosCheckPthreadValid
(
tsTelemetryThread
))
{
tsem_post
(
&
tsExitSem
);
pthread_mutex_lock
(
&
tsExitLock
);
tsExit
=
1
;
pthread_cond_signal
(
&
tsExitCond
);
pthread_mutex_unlock
(
&
tsExitLock
);
pthread_join
(
tsTelemetryThread
,
NULL
);
tsem_destroy
(
&
tsExitSem
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录