Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d260d759
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d260d759
编写于
1月 04, 2023
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin' into enh/TD-21108
上级
ac7d250a
047aae9c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
122 addition
and
1 deletion
+122
-1
source/os/CMakeLists.txt
source/os/CMakeLists.txt
+5
-1
source/os/src/osFile.c
source/os/src/osFile.c
+23
-0
source/os/test/osTests.cpp
source/os/test/osTests.cpp
+94
-0
未找到文件。
source/os/CMakeLists.txt
浏览文件 @
d260d759
...
...
@@ -59,4 +59,8 @@ endif()
IF
(
JEMALLOC_ENABLED
)
target_link_libraries
(
os PUBLIC -ljemalloc
)
ENDIF
()
\ No newline at end of file
ENDIF
()
if
(
${
BUILD_TEST
}
)
add_subdirectory
(
test
)
endif
(
${
BUILD_TEST
}
)
\ No newline at end of file
source/os/src/osFile.c
浏览文件 @
d260d759
...
...
@@ -526,6 +526,21 @@ int32_t taosFStatFile(TdFilePtr pFile, int64_t *size, int32_t *mtime) {
int32_t
taosLockFile
(
TdFilePtr
pFile
)
{
#ifdef WINDOWS
BOOL
fSuccess
=
FALSE
;
LARGE_INTEGER
fileSize
;
OVERLAPPED
overlapped
=
{
0
};
HANDLE
hFile
=
(
HANDLE
)
_get_osfhandle
(
pFile
->
fd
);
fSuccess
=
LockFileEx
(
hFile
,
LOCKFILE_EXCLUSIVE_LOCK
|
LOCKFILE_FAIL_IMMEDIATELY
,
0
,
// reserved
~
0
,
// number of bytes to lock low
~
0
,
// number of bytes to lock high
&
overlapped
// overlapped structure
);
if
(
!
fSuccess
)
{
return
GetLastError
();
}
return
0
;
#else
assert
(
pFile
->
fd
>=
0
);
// Please check if you have closed the file.
...
...
@@ -536,6 +551,14 @@ int32_t taosLockFile(TdFilePtr pFile) {
int32_t
taosUnLockFile
(
TdFilePtr
pFile
)
{
#ifdef WINDOWS
BOOL
fSuccess
=
FALSE
;
OVERLAPPED
overlapped
=
{
0
};
HANDLE
hFile
=
(
HANDLE
)
_get_osfhandle
(
pFile
->
fd
);
fSuccess
=
UnlockFileEx
(
hFile
,
0
,
~
0
,
~
0
,
&
overlapped
);
if
(
!
fSuccess
)
{
return
GetLastError
();
}
return
0
;
#else
assert
(
pFile
->
fd
>=
0
);
// Please check if you have closed the file.
...
...
source/os/test/osTests.cpp
浏览文件 @
d260d759
...
...
@@ -27,6 +27,7 @@
#pragma GCC diagnostic ignored "-Wpointer-arith"
#include "os.h"
#include "tlog.h"
TEST
(
osTest
,
osSystem
)
{
const
char
*
flags
=
"UTL FATAL "
;
...
...
@@ -35,4 +36,97 @@ TEST(osTest, osSystem) {
taosPrintTrace
(
flags
,
level
,
dflag
);
}
void
fileOperateOnFree
(
void
*
param
)
{
char
*
fname
=
(
char
*
)
param
;
TdFilePtr
pFile
=
taosOpenFile
(
fname
,
TD_FILE_CREATE
|
TD_FILE_WRITE
);
printf
(
"On free thread open file
\n
"
);
ASSERT_NE
(
pFile
,
nullptr
);
int
ret
=
taosLockFile
(
pFile
);
printf
(
"On free thread lock file ret:%d
\n
"
,
ret
);
ASSERT_EQ
(
ret
,
0
);
ret
=
taosUnLockFile
(
pFile
);
printf
(
"On free thread unlock file ret:%d
\n
"
,
ret
);
ASSERT_EQ
(
ret
,
0
);
ret
=
taosCloseFile
(
&
pFile
);
ASSERT_EQ
(
ret
,
0
);
printf
(
"On free thread close file ret:%d
\n
"
,
ret
);
}
void
*
fileOperateOnFreeThread
(
void
*
param
)
{
fileOperateOnFree
(
param
);
return
NULL
;
}
void
fileOperateOnBusy
(
void
*
param
)
{
char
*
fname
=
(
char
*
)
param
;
TdFilePtr
pFile
=
taosOpenFile
(
fname
,
TD_FILE_CREATE
|
TD_FILE_WRITE
);
printf
(
"On busy thread open file
\n
"
);
ASSERT_NE
(
pFile
,
nullptr
);
int
ret
=
taosLockFile
(
pFile
);
printf
(
"On busy thread lock file ret:%d
\n
"
,
ret
);
ASSERT_NE
(
ret
,
0
);
ret
=
taosUnLockFile
(
pFile
);
printf
(
"On busy thread unlock file ret:%d
\n
"
,
ret
);
#ifdef _TD_DARWIN_64
ASSERT_EQ
(
ret
,
0
);
#else
ASSERT_NE
(
ret
,
0
);
#endif
ret
=
taosCloseFile
(
&
pFile
);
printf
(
"On busy thread close file ret:%d
\n
"
,
ret
);
ASSERT_EQ
(
ret
,
0
);
}
void
*
fileOperateOnBusyThread
(
void
*
param
)
{
fileOperateOnBusy
(
param
);
return
NULL
;
}
TEST
(
osTest
,
osFile
)
{
char
*
fname
=
"./osfiletest1.txt"
;
TdFilePtr
pOutFD
=
taosCreateFile
(
fname
,
TD_FILE_WRITE
|
TD_FILE_CREATE
|
TD_FILE_TRUNC
);
ASSERT_NE
(
pOutFD
,
nullptr
);
printf
(
"create file success
\n
"
);
TdFilePtr
pFile
=
taosOpenFile
(
fname
,
TD_FILE_CREATE
|
TD_FILE_WRITE
);
printf
(
"open file
\n
"
);
ASSERT_NE
(
pFile
,
nullptr
);
int
ret
=
taosLockFile
(
pFile
);
printf
(
"lock file ret:%d
\n
"
,
ret
);
ASSERT_EQ
(
ret
,
0
);
TdThreadAttr
thattr
;
taosThreadAttrInit
(
&
thattr
);
TdThread
thread1
,
thread2
;
taosThreadCreate
(
&
(
thread1
),
&
thattr
,
fileOperateOnBusyThread
,
(
void
*
)
fname
);
taosThreadAttrDestroy
(
&
thattr
);
taosThreadJoin
(
thread1
,
NULL
);
taosThreadClear
(
&
thread1
);
ret
=
taosUnLockFile
(
pFile
);
printf
(
"unlock file ret:%d
\n
"
,
ret
);
ASSERT_EQ
(
ret
,
0
);
ret
=
taosCloseFile
(
&
pFile
);
printf
(
"close file ret:%d
\n
"
,
ret
);
ASSERT_EQ
(
ret
,
0
);
taosThreadCreate
(
&
(
thread2
),
&
thattr
,
fileOperateOnFreeThread
,
(
void
*
)
fname
);
taosThreadAttrDestroy
(
&
thattr
);
taosThreadJoin
(
thread2
,
NULL
);
taosThreadClear
(
&
thread2
);
//int ret = taosRemoveFile(fname);
//ASSERT_EQ(ret, 0);
//printf("remove file success");
}
#pragma GCC diagnostic pop
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录