Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
33c3f34f
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看板
提交
33c3f34f
编写于
8月 08, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more work
上级
b56aedff
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
49 addition
and
189 deletion
+49
-189
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+4
-13
source/dnode/vnode/src/tsdb/tsdbCache.c
source/dnode/vnode/src/tsdb/tsdbCache.c
+7
-7
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+8
-8
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+3
-3
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
+18
-149
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
+7
-7
source/dnode/vnode/src/tsdb/tsdbUtil.c
source/dnode/vnode/src/tsdb/tsdbUtil.c
+2
-2
未找到文件。
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
33c3f34f
...
...
@@ -137,8 +137,10 @@ int32_t tGetColData(uint8_t *p, SColData *pColData);
#define tBlockDataLastRow(PBLOCKDATA) tsdbRowFromBlockData(PBLOCKDATA, (PBLOCKDATA)->nRow - 1)
#define tBlockDataFirstKey(PBLOCKDATA) TSDBROW_KEY(&tBlockDataFirstRow(PBLOCKDATA))
#define tBlockDataLastKey(PBLOCKDATA) TSDBROW_KEY(&tBlockDataLastRow(PBLOCKDATA))
int32_t
tBlockDataInit
(
SBlockData
*
pBlockData
);
void
tBlockDataClear
(
SBlockData
*
pBlockData
,
int8_t
deepClear
);
int32_t
tBlockDataCreate
(
SBlockData
*
pBlockData
);
void
tBlockDataDestroy
(
SBlockData
*
pBlockData
,
int8_t
deepClear
);
void
tBlockDataReset
(
SBlockData
*
pBlockData
);
int32_t
tBlockDataSetSchema
(
SBlockData
*
pBlockData
,
STSchema
*
pTSchema
,
int64_t
suid
,
int64_t
uid
);
int32_t
tBlockDataAddColData
(
SBlockData
*
pBlockData
,
int32_t
iColData
,
SColData
**
ppColData
);
...
...
@@ -262,17 +264,6 @@ int32_t tsdbReadDataBlock(SDataFReader *pReader, SBlock *pBlock, SBlockData *pBl
int32_t
nColId
);
int32_t
tsdbReadLastBlock
(
SDataFReader
*
pReader
,
SBlockL
*
pBlockL
,
SBlockData
*
pBlockData
,
int16_t
*
aColId
,
int32_t
nColId
);
#if 0
int32_t tsdbReadColData(SDataFReader *pReader, SBlockIdx *pBlockIdx, SBlock *pBlock, int16_t *aColId, int32_t nCol,
SBlockData *pBlockData, uint8_t **ppBuf1, uint8_t **ppBuf2);
int32_t tsdbReadBlockData(SDataFReader *pReader, SBlockIdx *pBlockIdx, SBlock *pBlock, SBlockData *pBlockData,
uint8_t **ppBuf1, uint8_t **ppBuf2);
int32_t tsdbReadDataBlock(SDataFReader *pReader, SBlock *pBlock, SBlockData *pBlockData, uint8_t **ppBuf1,
uint8_t **ppBuf2);
int32_t tsdbReadLastBlock(SDataFReader *pReader, SBlockL *pBlockL, SBlockData *pBlockData, uint8_t **ppBuf1,
uint8_t **ppBuf2);
#endif
// SDelFWriter
int32_t
tsdbDelFWriterOpen
(
SDelFWriter
**
ppWriter
,
SDelFile
*
pFile
,
STsdb
*
pTsdb
);
int32_t
tsdbDelFWriterClose
(
SDelFWriter
**
ppWriter
,
int8_t
sync
);
...
...
source/dnode/vnode/src/tsdb/tsdbCache.c
浏览文件 @
33c3f34f
...
...
@@ -450,9 +450,9 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow) {
if
(
--
state
->
iFileSet
>=
0
)
{
pFileSet
=
(
SDFileSet
*
)
taosArrayGet
(
state
->
aDFileSet
,
state
->
iFileSet
);
}
else
{
// tBlockData
Clear
(&state->blockData, 1);
// tBlockData
Destroy
(&state->blockData, 1);
if
(
state
->
pBlockData
)
{
tBlockData
Clear
(
state
->
pBlockData
,
1
);
tBlockData
Destroy
(
state
->
pBlockData
,
1
);
state
->
pBlockData
=
NULL
;
}
...
...
@@ -494,7 +494,7 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow) {
if
(
!
state
->
pBlockData
)
{
state
->
pBlockData
=
&
state
->
blockData
;
tBlockData
Init
(
&
state
->
blockData
);
tBlockData
Create
(
&
state
->
blockData
);
}
}
case
SFSNEXTROW_BLOCKDATA
:
...
...
@@ -552,8 +552,8 @@ _err:
state
->
aBlockIdx
=
NULL
;
}
if
(
state
->
pBlockData
)
{
// tBlockData
Clear
(&state->blockData, 1);
tBlockData
Clear
(
state
->
pBlockData
,
1
);
// tBlockData
Destroy
(&state->blockData, 1);
tBlockData
Destroy
(
state
->
pBlockData
,
1
);
state
->
pBlockData
=
NULL
;
}
...
...
@@ -579,8 +579,8 @@ int32_t clearNextRowFromFS(void *iter) {
state
->
aBlockIdx
=
NULL
;
}
if
(
state
->
pBlockData
)
{
// tBlockData
Clear
(&state->blockData, 1);
tBlockData
Clear
(
state
->
pBlockData
,
1
);
// tBlockData
Destroy
(&state->blockData, 1);
tBlockData
Destroy
(
state
->
pBlockData
,
1
);
state
->
pBlockData
=
NULL
;
}
...
...
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
33c3f34f
...
...
@@ -1270,7 +1270,7 @@ static int32_t tsdbCommitDataStart(SCommitter *pCommitter) {
goto
_exit
;
}
code
=
tBlockData
Init
(
&
pCommitter
->
dReader
.
bData
);
code
=
tBlockData
Create
(
&
pCommitter
->
dReader
.
bData
);
if
(
code
)
goto
_exit
;
pCommitter
->
dReader
.
aBlockL
=
taosArrayInit
(
0
,
sizeof
(
SBlockL
));
...
...
@@ -1279,7 +1279,7 @@ static int32_t tsdbCommitDataStart(SCommitter *pCommitter) {
goto
_exit
;
}
code
=
tBlockData
Init
(
&
pCommitter
->
dReader
.
bDatal
);
code
=
tBlockData
Create
(
&
pCommitter
->
dReader
.
bDatal
);
if
(
code
)
goto
_exit
;
// Writer
...
...
@@ -1295,10 +1295,10 @@ static int32_t tsdbCommitDataStart(SCommitter *pCommitter) {
goto
_exit
;
}
code
=
tBlockData
Init
(
&
pCommitter
->
dWriter
.
bData
);
code
=
tBlockData
Create
(
&
pCommitter
->
dWriter
.
bData
);
if
(
code
)
goto
_exit
;
code
=
tBlockData
Init
(
&
pCommitter
->
dWriter
.
bDatal
);
code
=
tBlockData
Create
(
&
pCommitter
->
dWriter
.
bDatal
);
if
(
code
)
goto
_exit
;
_exit:
...
...
@@ -1309,16 +1309,16 @@ static void tsdbCommitDataEnd(SCommitter *pCommitter) {
// Reader
taosArrayDestroy
(
pCommitter
->
dReader
.
aBlockIdx
);
tMapDataClear
(
&
pCommitter
->
dReader
.
mBlock
);
tBlockData
Clear
(
&
pCommitter
->
dReader
.
bData
,
1
);
tBlockData
Destroy
(
&
pCommitter
->
dReader
.
bData
,
1
);
taosArrayDestroy
(
pCommitter
->
dReader
.
aBlockL
);
tBlockData
Clear
(
&
pCommitter
->
dReader
.
bDatal
,
1
);
tBlockData
Destroy
(
&
pCommitter
->
dReader
.
bDatal
,
1
);
// Writer
taosArrayDestroy
(
pCommitter
->
dWriter
.
aBlockIdx
);
taosArrayDestroy
(
pCommitter
->
dWriter
.
aBlockL
);
tMapDataClear
(
&
pCommitter
->
dWriter
.
mBlock
);
tBlockData
Clear
(
&
pCommitter
->
dWriter
.
bData
,
1
);
tBlockData
Clear
(
&
pCommitter
->
dWriter
.
bDatal
,
1
);
tBlockData
Destroy
(
&
pCommitter
->
dWriter
.
bData
,
1
);
tBlockData
Destroy
(
&
pCommitter
->
dWriter
.
bDatal
,
1
);
tTSchemaDestroy
(
pCommitter
->
skmTable
.
pTSchema
);
tTSchemaDestroy
(
pCommitter
->
skmRow
.
pTSchema
);
}
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
33c3f34f
...
...
@@ -438,7 +438,7 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd
pSup
->
tsColAgg
.
colId
=
PRIMARYKEY_TIMESTAMP_COL_ID
;
code
=
tBlockData
Init
(
&
pReader
->
status
.
fileBlockData
);
code
=
tBlockData
Create
(
&
pReader
->
status
.
fileBlockData
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
code
;
goto
_end
;
...
...
@@ -2670,7 +2670,7 @@ void tsdbReaderClose(STsdbReader* pReader) {
}
}
taosMemoryFree
(
pSupInfo
->
buildBuf
);
tBlockData
Clear
(
&
pReader
->
status
.
fileBlockData
,
true
);
tBlockData
Destroy
(
&
pReader
->
status
.
fileBlockData
,
true
);
cleanupDataBlockIterator
(
&
pReader
->
status
.
blockIter
);
...
...
@@ -2874,7 +2874,7 @@ static SArray* doRetrieveDataBlock(STsdbReader* pReader) {
tBlockDataClearData
(
&
pStatus
->
fileBlockData
);
int32_t
code
=
doLoadFileBlockData
(
pReader
,
&
pStatus
->
blockIter
,
pBlockScanInfo
,
&
pStatus
->
fileBlockData
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tBlockData
Clear
(
&
pStatus
->
fileBlockData
,
1
);
tBlockData
Destroy
(
&
pStatus
->
fileBlockData
,
1
);
terrno
=
code
;
return
NULL
;
...
...
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
浏览文件 @
33c3f34f
...
...
@@ -846,63 +846,6 @@ _err:
}
#if 0
static int32_t tsdbReadBlockDataKey(SBlockData *pBlockData, SBlockInfo *pSubBlock, uint8_t *pBuf, uint8_t **ppBuf) {
int32_t code = 0;
#if 0
int64_t size = pSubBlock->szVersion + pSubBlock->szTSKEY + sizeof(TSCKSUM);
int64_t n;
if (!taosCheckChecksumWhole(pBuf, size)) {
code = TSDB_CODE_FILE_CORRUPTED;
goto _err;
}
code = tRealloc((uint8_t **)&pBlockData->aVersion, sizeof(int64_t) * pSubBlock->nRow);
if (code) goto _err;
code = tRealloc((uint8_t **)&pBlockData->aTSKEY, sizeof(TSKEY) * pSubBlock->nRow);
if (code) goto _err;
if (pSubBlock->cmprAlg == NO_COMPRESSION) {
ASSERT(pSubBlock->szVersion == sizeof(int64_t) * pSubBlock->nRow);
ASSERT(pSubBlock->szTSKEY == sizeof(TSKEY) * pSubBlock->nRow);
// VERSION
memcpy(pBlockData->aVersion, pBuf, pSubBlock->szVersion);
// TSKEY
memcpy(pBlockData->aTSKEY, pBuf + pSubBlock->szVersion, pSubBlock->szTSKEY);
} else {
size = sizeof(int64_t) * pSubBlock->nRow + COMP_OVERFLOW_BYTES;
if (pSubBlock->cmprAlg == TWO_STAGE_COMP) {
code = tRealloc(ppBuf, size);
if (code) goto _err;
}
// VERSION
n = tsDecompressBigint(pBuf, pSubBlock->szVersion, pSubBlock->nRow, (char *)pBlockData->aVersion,
sizeof(int64_t) * pSubBlock->nRow, pSubBlock->cmprAlg, *ppBuf, size);
if (n < 0) {
code = TSDB_CODE_COMPRESS_ERROR;
goto _err;
}
// TSKEY
n = tsDecompressTimestamp(pBuf + pSubBlock->szVersion, pSubBlock->szTSKEY, pSubBlock->nRow,
(char *)pBlockData->aTSKEY, sizeof(TSKEY) * pSubBlock->nRow, pSubBlock->cmprAlg, *ppBuf,
size);
if (n < 0) {
code = TSDB_CODE_COMPRESS_ERROR;
goto _err;
}
}
return code;
_err:
#endif
return code;
}
static int32_t tsdbReadColDataImpl(SBlockInfo *pSubBlock, SBlockCol *pBlockCol, SColData *pColData, uint8_t *pBuf,
uint8_t **ppBuf) {
int32_t code = 0;
...
...
@@ -998,80 +941,6 @@ _err:
return code;
}
#if 0
static int32_t tsdbReadBlockCol(uint8_t *pBuf, int32_t szBlockCol, SDiskDataHdr *pHdr, SArray *aBlockCol) {
int32_t code = 0;
int32_t n = 0;
SBlockCol blockCol;
SBlockCol *pBlockCol = &blockCol;
// checksum
if (!taosCheckChecksumWhole(pBuf, szBlockCol + sizeof(TSCKSUM))) {
code = TSDB_CODE_FILE_CORRUPTED;
goto _err;
}
// hdr
*pHdr = *(SDiskDataHdr *)pBuf;
n += sizeof(SDiskDataHdr);
// aBlockCol
while (n < szBlockCol) {
n += tGetBlockCol(pBuf + n, pBlockCol);
if (taosArrayPush(aBlockCol, pBlockCol) == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _err;
}
}
ASSERT(n == szBlockCol);
return code;
_err:
return code;
}
#endif
static int32_t tsdbReadDataArray(uint8_t *pInput, int32_t szInput, int32_t nEle, int8_t type, int8_t cmprAlg,
uint8_t **ppOut, uint8_t **ppBuf) {
int32_t code = 0;
int32_t size;
// size
if (IS_VAR_DATA_TYPE(type)) {
size = nEle;
} else {
size = tDataTypes[type].bytes * nEle;
}
// alloc
code = tRealloc(ppOut, size);
if (code) goto _exit;
// decode
if (cmprAlg == NO_COMPRESSION) {
ASSERT(szInput == size);
memcpy(*ppOut, pInput, size);
} else {
if (cmprAlg == TWO_STAGE_COMP) {
code = tRealloc(ppBuf, size + COMP_OVERFLOW_BYTES);
if (code) goto _exit;
int32_t n =
tDataTypes[type].decompFunc(pInput, szInput, nEle, *ppOut, size, cmprAlg, *ppBuf, size + COMP_OVERFLOW_BYTES);
if (n <= 0) {
code = TSDB_CODE_COMPRESS_ERROR;
goto _exit;
}
}
}
_exit:
return code;
}
static int32_t tsdbReadSubColData(SDataFReader *pReader, SBlockIdx *pBlockIdx, SBlock *pBlock, int32_t iSubBlock,
int16_t *aColId, int32_t nCol, SBlockData *pBlockData, uint8_t **ppBuf1,
uint8_t **ppBuf2) {
...
...
@@ -1210,29 +1079,29 @@ int32_t tsdbReadColData(SDataFReader *pReader, SBlockIdx *pBlockIdx, SBlock *pBl
SBlockData *pBlockData1 = &(SBlockData){0};
SBlockData *pBlockData2 = &(SBlockData){0};
tBlockData
Init
(pBlockData1);
tBlockData
Init
(pBlockData2);
tBlockData
Create
(pBlockData1);
tBlockData
Create
(pBlockData2);
for (int32_t iSubBlock = 1; iSubBlock < pBlock->nSubBlock; iSubBlock++) {
code = tsdbReadSubColData(pReader, pBlockIdx, pBlock, iSubBlock, aColId, nCol, pBlockData1, ppBuf1, ppBuf2);
if (code) goto _err;
code = tBlockDataCopy(pBlockData, pBlockData2);
if (code) {
tBlockData
Clear
(pBlockData1, 1);
tBlockData
Clear
(pBlockData2, 1);
tBlockData
Destroy
(pBlockData1, 1);
tBlockData
Destroy
(pBlockData2, 1);
goto _err;
}
code = tBlockDataMerge(pBlockData1, pBlockData2, pBlockData);
if (code) {
tBlockData
Clear
(pBlockData1, 1);
tBlockData
Clear
(pBlockData2, 1);
tBlockData
Destroy
(pBlockData1, 1);
tBlockData
Destroy
(pBlockData2, 1);
goto _err;
}
}
tBlockData
Clear
(pBlockData1, 1);
tBlockData
Clear
(pBlockData2, 1);
tBlockData
Destroy
(pBlockData1, 1);
tBlockData
Destroy
(pBlockData2, 1);
}
tFree(pBuf1);
...
...
@@ -1349,34 +1218,34 @@ int32_t tsdbReadDataBlock(SDataFReader *pReader, SBlock *pBlock, SBlockData *pBl
SBlockData *pBlockData1 = &(SBlockData){0};
SBlockData *pBlockData2 = &(SBlockData){0};
tBlockData
Init
(pBlockData1);
tBlockData
Init
(pBlockData2);
tBlockData
Create
(pBlockData1);
tBlockData
Create
(pBlockData2);
for (iSubBlock = 1; iSubBlock < pBlock->nSubBlock; iSubBlock++) {
code = tsdbReadSubBlockData(pReader, pBlock, iSubBlock, pBlockData1, ppBuf1, ppBuf2);
if (code) {
tBlockData
Clear
(pBlockData1, 1);
tBlockData
Clear
(pBlockData2, 1);
tBlockData
Destroy
(pBlockData1, 1);
tBlockData
Destroy
(pBlockData2, 1);
goto _err;
}
code = tBlockDataCopy(pBlockData, pBlockData2);
if (code) {
tBlockData
Clear
(pBlockData1, 1);
tBlockData
Clear
(pBlockData2, 1);
tBlockData
Destroy
(pBlockData1, 1);
tBlockData
Destroy
(pBlockData2, 1);
goto _err;
}
// merge two block data
code = tBlockDataMerge(pBlockData1, pBlockData2, pBlockData);
if (code) {
tBlockData
Clear
(pBlockData1, 1);
tBlockData
Clear
(pBlockData2, 1);
tBlockData
Destroy
(pBlockData1, 1);
tBlockData
Destroy
(pBlockData2, 1);
goto _err;
}
}
tBlockData
Clear
(pBlockData1, 1);
tBlockData
Clear
(pBlockData2, 1);
tBlockData
Destroy
(pBlockData1, 1);
tBlockData
Destroy
(pBlockData2, 1);
}
ASSERT(pBlock->nRow == pBlockData->nRow);
...
...
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
浏览文件 @
33c3f34f
...
...
@@ -289,9 +289,9 @@ int32_t tsdbSnapReaderOpen(STsdb* pTsdb, int64_t sver, int64_t ever, int8_t type
goto _err;
}
pReader->mBlock = tMapDataInit();
code = tBlockData
Init
(&pReader->oBlockData);
code = tBlockData
Create
(&pReader->oBlockData);
if (code) goto _err;
code = tBlockData
Init
(&pReader->nBlockData);
code = tBlockData
Create
(&pReader->nBlockData);
if (code) goto _err;
pReader->aDelIdx = taosArrayInit(0, sizeof(SDelIdx));
...
...
@@ -327,8 +327,8 @@ int32_t tsdbSnapReaderClose(STsdbSnapReader** ppReader) {
}
taosArrayDestroy(pReader->aBlockIdx);
tMapDataClear(&pReader->mBlock);
tBlockData
Clear
(&pReader->oBlockData, 1);
tBlockData
Clear
(&pReader->nBlockData, 1);
tBlockData
Destroy
(&pReader->oBlockData, 1);
tBlockData
Destroy
(&pReader->nBlockData, 1);
if (pReader->pDelFReader) {
tsdbDelFReaderClose(&pReader->pDelFReader);
...
...
@@ -1123,7 +1123,7 @@ int32_t tsdbSnapWriterOpen(STsdb* pTsdb, int64_t sver, int64_t ever, STsdbSnapWr
pWriter->commitID = pTsdb->pVnode->state.commitID;
// for data file
code = tBlockData
Init
(&pWriter->bData);
code = tBlockData
Create
(&pWriter->bData);
if (code) goto _err;
pWriter->aBlockIdx = taosArrayInit(0, sizeof(SBlockIdx));
...
...
@@ -1131,7 +1131,7 @@ int32_t tsdbSnapWriterOpen(STsdb* pTsdb, int64_t sver, int64_t ever, STsdbSnapWr
code = TSDB_CODE_OUT_OF_MEMORY;
goto _err;
}
code = tBlockData
Init
(&pWriter->bDataR);
code = tBlockData
Create
(&pWriter->bDataR);
if (code) goto _err;
pWriter->aBlockIdxW = taosArrayInit(0, sizeof(SBlockIdx));
...
...
@@ -1139,7 +1139,7 @@ int32_t tsdbSnapWriterOpen(STsdb* pTsdb, int64_t sver, int64_t ever, STsdbSnapWr
code = TSDB_CODE_OUT_OF_MEMORY;
goto _err;
}
code = tBlockData
Init
(&pWriter->bDataW);
code = tBlockData
Create
(&pWriter->bDataW);
if (code) goto _err;
// for del file
...
...
source/dnode/vnode/src/tsdb/tsdbUtil.c
浏览文件 @
33c3f34f
...
...
@@ -1107,7 +1107,7 @@ static FORCE_INLINE int32_t tColDataCmprFn(const void *p1, const void *p2) {
}
// SBlockData ======================================================
int32_t
tBlockData
Init
(
SBlockData
*
pBlockData
)
{
int32_t
tBlockData
Create
(
SBlockData
*
pBlockData
)
{
int32_t
code
=
0
;
pBlockData
->
suid
=
0
;
...
...
@@ -1132,7 +1132,7 @@ _exit:
return
code
;
}
void
tBlockData
Clear
(
SBlockData
*
pBlockData
,
int8_t
deepClear
)
{
void
tBlockData
Destroy
(
SBlockData
*
pBlockData
,
int8_t
deepClear
)
{
tFree
((
uint8_t
*
)
pBlockData
->
aUid
);
tFree
((
uint8_t
*
)
pBlockData
->
aVersion
);
tFree
((
uint8_t
*
)
pBlockData
->
aTSKEY
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录