Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c02f1e08
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看板
未验证
提交
c02f1e08
编写于
8月 26, 2022
作者:
wafwerar
提交者:
GitHub
8月 26, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16420 from taosdata/fix/ZhiqiangWang/TD-13064-fix-mac-semaphore-error
os: fix Mac Semaphore error
上级
5ce84e43
70ea1235
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
627 addition
and
755 deletion
+627
-755
cmake/cmake.define
cmake/cmake.define
+0
-2
cmake/cmake.install
cmake/cmake.install
+16
-0
cmake/cmake.options
cmake/cmake.options
+6
-0
include/os/osSemaphore.h
include/os/osSemaphore.h
+74
-75
source/os/src/osSemaphore.c
source/os/src/osSemaphore.c
+531
-678
未找到文件。
cmake/cmake.define
浏览文件 @
c02f1e08
...
...
@@ -2,8 +2,6 @@ cmake_minimum_required(VERSION 3.0)
set(CMAKE_VERBOSE_MAKEFILE OFF)
SET(BUILD_SHARED_LIBS "OFF")
#set output directory
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/build/lib)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/build/bin)
...
...
cmake/cmake.install
浏览文件 @
c02f1e08
SET
(
PREPARE_ENV_CMD
"prepare_env_cmd"
)
SET
(
PREPARE_ENV_TARGET
"prepare_env_target"
)
ADD_CUSTOM_COMMAND
(
OUTPUT
$
{
PREPARE_ENV_CMD
}
POST_BUILD
COMMAND
echo
"make test directory"
DEPENDS
taosd
COMMAND
$
{
CMAKE_COMMAND
}
-
E
make_directory
$
{
TD_TESTS_OUTPUT_DIR
}
/
cfg
/
COMMAND
$
{
CMAKE_COMMAND
}
-
E
make_directory
$
{
TD_TESTS_OUTPUT_DIR
}
/
log
/
COMMAND
$
{
CMAKE_COMMAND
}
-
E
make_directory
$
{
TD_TESTS_OUTPUT_DIR
}
/
data
/
COMMAND
$
{
CMAKE_COMMAND
}
-
E
echo
dataDir
$
{
TD_TESTS_OUTPUT_DIR
}
/
data
>
$
{
TD_TESTS_OUTPUT_DIR
}
/
cfg
/
taos
.
cfg
COMMAND
$
{
CMAKE_COMMAND
}
-
E
echo
logDir
$
{
TD_TESTS_OUTPUT_DIR
}
/
log
>>
$
{
TD_TESTS_OUTPUT_DIR
}
/
cfg
/
taos
.
cfg
COMMAND
$
{
CMAKE_COMMAND
}
-
E
echo
charset
UTF
-
8
>>
$
{
TD_TESTS_OUTPUT_DIR
}
/
cfg
/
taos
.
cfg
COMMAND
$
{
CMAKE_COMMAND
}
-
E
echo
monitor
0
>>
$
{
TD_TESTS_OUTPUT_DIR
}
/
cfg
/
taos
.
cfg
COMMENT
"prepare taosd environment"
)
ADD_CUSTOM_TARGET
(
$
{
PREPARE_ENV_TARGET
}
ALL
WORKING_DIRECTORY
$
{
TD_EXECUTABLE_OUTPUT_PATH
}
DEPENDS
$
{
PREPARE_ENV_CMD
})
IF
(
TD_LINUX
)
SET
(
TD_MAKE_INSTALL_SH
"${TD_SOURCE_DIR}/packaging/tools/make_install.sh"
)
INSTALL
(
CODE
"MESSAGE(
\"
make install script: ${TD_MAKE_INSTALL_SH}
\"
)"
)
...
...
cmake/cmake.options
浏览文件 @
c02f1e08
...
...
@@ -90,6 +90,12 @@ ELSE ()
ENDIF ()
ENDIF ()
option(
BUILD_SHARED_LIBS
""
OFF
)
option(
RUST_BINDINGS
"If build with rust-bindings"
...
...
include/os/osSemaphore.h
浏览文件 @
c02f1e08
...
...
@@ -23,10 +23,9 @@ extern "C" {
#include <semaphore.h>
#if defined(_TD_DARWIN_64)
#include <dispatch/dispatch.h>
// typedef struct tsem_s *tsem_t;
typedef
struct
bosal_sem_t
*
tsem_t
;
typedef
dispatch_semaphore_t
tsem_t
;
int
tsem_init
(
tsem_t
*
sem
,
int
pshared
,
unsigned
int
value
);
int
tsem_wait
(
tsem_t
*
sem
);
...
...
source/os/src/osSemaphore.c
浏览文件 @
c02f1e08
...
...
@@ -392,179 +392,32 @@ int32_t tsem_timewait(tsem_t* sem, int64_t nanosecs) {
// *sem = NULL;
// return 0;
// }
typedef
struct
{
pthread_mutex_t
count_lock
;
pthread_cond_t
count_bump
;
unsigned
int
count
;
}
bosal_sem_t
;
int
tsem_init
(
tsem_t
*
psem
,
int
flags
,
unsigned
int
count
)
{
bosal_sem_t
*
pnewsem
;
int
result
;
pnewsem
=
(
bosal_sem_t
*
)
malloc
(
sizeof
(
bosal_sem_t
));
if
(
!
pnewsem
)
{
return
-
1
;
}
result
=
pthread_mutex_init
(
&
pnewsem
->
count_lock
,
NULL
);
if
(
result
)
{
free
(
pnewsem
);
return
result
;
}
result
=
pthread_cond_init
(
&
pnewsem
->
count_bump
,
NULL
);
if
(
result
)
{
pthread_mutex_destroy
(
&
pnewsem
->
count_lock
);
free
(
pnewsem
);
return
result
;
}
pnewsem
->
count
=
count
;
*
psem
=
(
tsem_t
)
pnewsem
;
*
psem
=
dispatch_semaphore_create
(
count
);
if
(
*
psem
==
NULL
)
return
-
1
;
return
0
;
}
int
tsem_destroy
(
tsem_t
*
psem
)
{
bosal_sem_t
*
poldsem
;
if
(
!
psem
)
{
return
EINVAL
;
}
poldsem
=
(
bosal_sem_t
*
)
*
psem
;
pthread_mutex_destroy
(
&
poldsem
->
count_lock
);
pthread_cond_destroy
(
&
poldsem
->
count_bump
);
free
(
poldsem
);
return
0
;
}
int
tsem_post
(
tsem_t
*
psem
)
{
bosal_sem_t
*
pxsem
;
int
result
,
xresult
;
if
(
!
psem
)
{
return
EINVAL
;
}
pxsem
=
(
bosal_sem_t
*
)
*
psem
;
result
=
pthread_mutex_lock
(
&
pxsem
->
count_lock
);
if
(
result
)
{
return
result
;
}
pxsem
->
count
=
pxsem
->
count
+
1
;
xresult
=
pthread_cond_signal
(
&
pxsem
->
count_bump
);
result
=
pthread_mutex_unlock
(
&
pxsem
->
count_lock
);
if
(
result
)
{
return
result
;
}
if
(
xresult
)
{
errno
=
xresult
;
return
-
1
;
}
return
0
;
}
int
tsem_trywait
(
tsem_t
*
psem
)
{
bosal_sem_t
*
pxsem
;
int
result
,
xresult
;
if
(
!
psem
)
{
return
EINVAL
;
}
pxsem
=
(
bosal_sem_t
*
)
*
psem
;
result
=
pthread_mutex_lock
(
&
pxsem
->
count_lock
);
if
(
result
)
{
return
result
;
}
xresult
=
0
;
if
(
pxsem
->
count
>
0
)
{
pxsem
->
count
--
;
}
else
{
xresult
=
EAGAIN
;
}
result
=
pthread_mutex_unlock
(
&
pxsem
->
count_lock
);
if
(
result
)
{
return
result
;
}
if
(
xresult
)
{
errno
=
xresult
;
return
-
1
;
}
if
(
psem
==
NULL
||
*
psem
==
NULL
)
return
-
1
;
dispatch_semaphore_signal
(
*
psem
);
return
0
;
}
int
tsem_wait
(
tsem_t
*
psem
)
{
bosal_sem_t
*
pxsem
;
int
result
,
xresult
;
if
(
!
psem
)
{
return
EINVAL
;
}
pxsem
=
(
bosal_sem_t
*
)
*
psem
;
result
=
pthread_mutex_lock
(
&
pxsem
->
count_lock
);
if
(
result
)
{
return
result
;
}
xresult
=
0
;
if
(
pxsem
->
count
==
0
)
{
xresult
=
pthread_cond_wait
(
&
pxsem
->
count_bump
,
&
pxsem
->
count_lock
);
}
if
(
!
xresult
)
{
if
(
pxsem
->
count
>
0
)
{
pxsem
->
count
--
;
}
}
result
=
pthread_mutex_unlock
(
&
pxsem
->
count_lock
);
if
(
result
)
{
return
result
;
}
if
(
xresult
)
{
errno
=
xresult
;
return
-
1
;
}
if
(
psem
==
NULL
||
*
psem
==
NULL
)
return
-
1
;
dispatch_semaphore_wait
(
*
psem
,
DISPATCH_TIME_FOREVER
);
return
0
;
}
int
tsem_timewait
(
tsem_t
*
psem
,
int64_t
nanosecs
)
{
struct
timespec
abstim
=
{
.
tv_sec
=
0
,
.
tv_nsec
=
nanosecs
,
};
bosal_sem_t
*
pxsem
;
int
result
,
xresult
;
if
(
!
psem
)
{
return
EINVAL
;
}
pxsem
=
(
bosal_sem_t
*
)
*
psem
;
result
=
pthread_mutex_lock
(
&
pxsem
->
count_lock
);
if
(
result
)
{
return
result
;
}
xresult
=
0
;
if
(
pxsem
->
count
==
0
)
{
xresult
=
pthread_cond_timedwait
(
&
pxsem
->
count_bump
,
&
pxsem
->
count_lock
,
&
abstim
);
}
if
(
!
xresult
)
{
if
(
pxsem
->
count
>
0
)
{
pxsem
->
count
--
;
}
}
result
=
pthread_mutex_unlock
(
&
pxsem
->
count_lock
);
if
(
result
)
{
return
result
;
}
if
(
xresult
)
{
errno
=
xresult
;
return
-
1
;
}
if
(
psem
==
NULL
||
*
psem
==
NULL
)
return
-
1
;
dispatch_semaphore_wait
(
*
psem
,
nanosecs
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录