os: add Mac compile support
This commit is contained in:
parent
8a76abc3bf
commit
b9a1c6744c
|
@ -98,12 +98,12 @@ ELSE ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (${SANITIZER} MATCHES "true")
|
IF (${SANITIZER} MATCHES "true")
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Werror=return-type -fPIC -gdwarf-2 -fsanitize=address -fsanitize=undefined -fsanitize-recover=all -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize=shift-base -fno-sanitize=alignment -g3")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Werror=return-type -fPIC -gdwarf-2 -fsanitize=address -fsanitize=undefined -fsanitize-recover=all -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize=shift-base -fno-sanitize=alignment -g3 -Wformat=0")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-literal-suffix -Werror=return-type -fPIC -gdwarf-2 -fsanitize=address -fsanitize=undefined -fsanitize-recover=all -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize=shift-base -fno-sanitize=alignment -g3")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-literal-suffix -Werror=return-type -fPIC -gdwarf-2 -fsanitize=address -fsanitize=undefined -fsanitize-recover=all -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize=shift-base -fno-sanitize=alignment -g3 -Wformat=0")
|
||||||
MESSAGE(STATUS "Will compile with Address Sanitizer!")
|
MESSAGE(STATUS "Will compile with Address Sanitizer!")
|
||||||
ELSE ()
|
ELSE ()
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Werror=return-type -fPIC -gdwarf-2 -g3")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Werror=return-type -fPIC -gdwarf-2 -g3 -Wformat=0")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-literal-suffix -Werror=return-type -fPIC -gdwarf-2 -g3")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-literal-suffix -Werror=return-type -fPIC -gdwarf-2 -g3 -Wformat=0")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
MESSAGE("System processor ID: ${CMAKE_SYSTEM_PROCESSOR}")
|
MESSAGE("System processor ID: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||||
|
|
|
@ -65,7 +65,7 @@ typedef struct SQueryExecRes {
|
||||||
} SQueryExecRes;
|
} SQueryExecRes;
|
||||||
|
|
||||||
typedef struct SIndexMeta {
|
typedef struct SIndexMeta {
|
||||||
#ifdef WINDOWS
|
#if defined(WINDOWS) || defined(_TD_DARWIN_64)
|
||||||
size_t avoidCompilationErrors;
|
size_t avoidCompilationErrors;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,6 @@ extern "C" {
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <sys/statvfs.h>
|
#include <sys/statvfs.h>
|
||||||
#include <sys/prctl.h>
|
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ int8_t atomic_add_fetch_8(int8_t volatile *ptr, int8_t val);
|
||||||
int16_t atomic_add_fetch_16(int16_t volatile *ptr, int16_t val);
|
int16_t atomic_add_fetch_16(int16_t volatile *ptr, int16_t val);
|
||||||
int32_t atomic_add_fetch_32(int32_t volatile *ptr, int32_t val);
|
int32_t atomic_add_fetch_32(int32_t volatile *ptr, int32_t val);
|
||||||
int64_t atomic_add_fetch_64(int64_t volatile *ptr, int64_t val);
|
int64_t atomic_add_fetch_64(int64_t volatile *ptr, int64_t val);
|
||||||
void *atomic_add_fetch_ptr(void *ptr, void *val);
|
void *atomic_add_fetch_ptr(void *ptr, int64_t val);
|
||||||
int8_t atomic_fetch_add_8(int8_t volatile *ptr, int8_t val);
|
int8_t atomic_fetch_add_8(int8_t volatile *ptr, int8_t val);
|
||||||
int16_t atomic_fetch_add_16(int16_t volatile *ptr, int16_t val);
|
int16_t atomic_fetch_add_16(int16_t volatile *ptr, int16_t val);
|
||||||
int32_t atomic_fetch_add_32(int32_t volatile *ptr, int32_t val);
|
int32_t atomic_fetch_add_32(int32_t volatile *ptr, int32_t val);
|
||||||
|
@ -73,7 +73,7 @@ int8_t atomic_sub_fetch_8(int8_t volatile *ptr, int8_t val);
|
||||||
int16_t atomic_sub_fetch_16(int16_t volatile *ptr, int16_t val);
|
int16_t atomic_sub_fetch_16(int16_t volatile *ptr, int16_t val);
|
||||||
int32_t atomic_sub_fetch_32(int32_t volatile *ptr, int32_t val);
|
int32_t atomic_sub_fetch_32(int32_t volatile *ptr, int32_t val);
|
||||||
int64_t atomic_sub_fetch_64(int64_t volatile *ptr, int64_t val);
|
int64_t atomic_sub_fetch_64(int64_t volatile *ptr, int64_t val);
|
||||||
void *atomic_sub_fetch_ptr(void *ptr, void *val);
|
void *atomic_sub_fetch_ptr(void *ptr, int64_t val);
|
||||||
int8_t atomic_fetch_sub_8(int8_t volatile *ptr, int8_t val);
|
int8_t atomic_fetch_sub_8(int8_t volatile *ptr, int8_t val);
|
||||||
int16_t atomic_fetch_sub_16(int16_t volatile *ptr, int16_t val);
|
int16_t atomic_fetch_sub_16(int16_t volatile *ptr, int16_t val);
|
||||||
int32_t atomic_fetch_sub_32(int32_t volatile *ptr, int32_t val);
|
int32_t atomic_fetch_sub_32(int32_t volatile *ptr, int32_t val);
|
||||||
|
|
|
@ -24,7 +24,9 @@ extern "C" {
|
||||||
|
|
||||||
#if defined(_TD_DARWIN_64)
|
#if defined(_TD_DARWIN_64)
|
||||||
|
|
||||||
typedef struct tsem_s *tsem_t;
|
// typedef struct tsem_s *tsem_t;
|
||||||
|
typedef struct bosal_sem_t *tsem_t;
|
||||||
|
|
||||||
|
|
||||||
int tsem_init(tsem_t *sem, int pshared, unsigned int value);
|
int tsem_init(tsem_t *sem, int pshared, unsigned int value);
|
||||||
int tsem_wait(tsem_t *sem);
|
int tsem_wait(tsem_t *sem);
|
||||||
|
@ -51,11 +53,11 @@ int tsem_timewait(tsem_t *sim, int64_t nanosecs);
|
||||||
// #define taosThreadRwlockRdlock(lock) taosThreadMutexLock(lock)
|
// #define taosThreadRwlockRdlock(lock) taosThreadMutexLock(lock)
|
||||||
// #define taosThreadRwlockUnlock(lock) taosThreadMutexUnlock(lock)
|
// #define taosThreadRwlockUnlock(lock) taosThreadMutexUnlock(lock)
|
||||||
|
|
||||||
#define TdThreadSpinlock TdThreadMutex
|
// #define TdThreadSpinlock TdThreadMutex
|
||||||
#define taosThreadSpinInit(lock, NULL) taosThreadMutexInit(lock, NULL)
|
// #define taosThreadSpinInit(lock, NULL) taosThreadMutexInit(lock, NULL)
|
||||||
#define taosThreadSpinDestroy(lock) taosThreadMutexDestroy(lock)
|
// #define taosThreadSpinDestroy(lock) taosThreadMutexDestroy(lock)
|
||||||
#define taosThreadSpinLock(lock) taosThreadMutexLock(lock)
|
// #define taosThreadSpinLock(lock) taosThreadMutexLock(lock)
|
||||||
#define taosThreadSpinUnlock(lock) taosThreadMutexUnlock(lock)
|
// #define taosThreadSpinUnlock(lock) taosThreadMutexUnlock(lock)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool taosCheckPthreadValid(TdThread thread);
|
bool taosCheckPthreadValid(TdThread thread);
|
||||||
|
|
|
@ -64,7 +64,6 @@
|
||||||
#include <osEok.h>
|
#include <osEok.h>
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <sys/epoll.h>
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -77,15 +76,12 @@ typedef int socklen_t;
|
||||||
#define TAOS_EPOLL_WAIT_TIME 100
|
#define TAOS_EPOLL_WAIT_TIME 100
|
||||||
typedef SOCKET eventfd_t;
|
typedef SOCKET eventfd_t;
|
||||||
#define eventfd(a, b) -1
|
#define eventfd(a, b) -1
|
||||||
#define EpollClose(pollFd) epoll_close(pollFd)
|
|
||||||
#ifndef EPOLLWAKEUP
|
#ifndef EPOLLWAKEUP
|
||||||
#define EPOLLWAKEUP (1u << 29)
|
#define EPOLLWAKEUP (1u << 29)
|
||||||
#endif
|
#endif
|
||||||
#elif defined(_TD_DARWIN_64)
|
#elif defined(_TD_DARWIN_64)
|
||||||
#define TAOS_EPOLL_WAIT_TIME 500
|
#define TAOS_EPOLL_WAIT_TIME 500
|
||||||
typedef int32_t SOCKET;
|
typedef int32_t SOCKET;
|
||||||
typedef SOCKET EpollFd;
|
|
||||||
#define EpollClose(pollFd) epoll_close(pollFd)
|
|
||||||
#else
|
#else
|
||||||
#define TAOS_EPOLL_WAIT_TIME 500
|
#define TAOS_EPOLL_WAIT_TIME 500
|
||||||
typedef int32_t SOCKET;
|
typedef int32_t SOCKET;
|
||||||
|
@ -122,14 +118,6 @@ typedef SOCKET EpollFd;
|
||||||
typedef int32_t SocketFd;
|
typedef int32_t SocketFd;
|
||||||
typedef SocketFd EpollFd;
|
typedef SocketFd EpollFd;
|
||||||
|
|
||||||
typedef struct TdSocket {
|
|
||||||
#if SOCKET_WITH_LOCK
|
|
||||||
TdThreadRwlock rwlock;
|
|
||||||
#endif
|
|
||||||
int refId;
|
|
||||||
SocketFd fd;
|
|
||||||
} * TdSocketPtr, TdSocket;
|
|
||||||
|
|
||||||
typedef struct TdSocketServer *TdSocketServerPtr;
|
typedef struct TdSocketServer *TdSocketServerPtr;
|
||||||
typedef struct TdSocket * TdSocketPtr;
|
typedef struct TdSocket * TdSocketPtr;
|
||||||
typedef struct TdEpoll * TdEpollPtr;
|
typedef struct TdEpoll * TdEpollPtr;
|
||||||
|
@ -181,11 +169,6 @@ void taosSetMaskSIGPIPE();
|
||||||
uint32_t taosInetAddr(const char *ipAddr);
|
uint32_t taosInetAddr(const char *ipAddr);
|
||||||
const char *taosInetNtoa(struct in_addr ipInt);
|
const char *taosInetNtoa(struct in_addr ipInt);
|
||||||
|
|
||||||
TdEpollPtr taosCreateEpoll(int32_t size);
|
|
||||||
int32_t taosCtlEpoll(TdEpollPtr pEpoll, int32_t epollOperate, TdSocketPtr pSocket, struct epoll_event *event);
|
|
||||||
int32_t taosWaitEpoll(TdEpollPtr pEpoll, struct epoll_event *event, int32_t maxEvents, int32_t timeout);
|
|
||||||
int32_t taosCloseEpoll(TdEpollPtr *ppEpoll);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -188,27 +188,27 @@ int32_t taosThreadJoin(TdThread thread, void **valuePtr);
|
||||||
int32_t taosThreadKeyCreate(TdThreadKey * key, void(*destructor)(void *));
|
int32_t taosThreadKeyCreate(TdThreadKey * key, void(*destructor)(void *));
|
||||||
int32_t taosThreadKeyDelete(TdThreadKey key);
|
int32_t taosThreadKeyDelete(TdThreadKey key);
|
||||||
int32_t taosThreadKill(TdThread thread, int32_t sig);
|
int32_t taosThreadKill(TdThread thread, int32_t sig);
|
||||||
int32_t taosThreadMutexConsistent(TdThreadMutex* mutex);
|
// int32_t taosThreadMutexConsistent(TdThreadMutex* mutex);
|
||||||
int32_t taosThreadMutexDestroy(TdThreadMutex * mutex);
|
int32_t taosThreadMutexDestroy(TdThreadMutex * mutex);
|
||||||
int32_t taosThreadMutexInit(TdThreadMutex * mutex, const TdThreadMutexAttr * attr);
|
int32_t taosThreadMutexInit(TdThreadMutex * mutex, const TdThreadMutexAttr * attr);
|
||||||
int32_t taosThreadMutexLock(TdThreadMutex * mutex);
|
int32_t taosThreadMutexLock(TdThreadMutex * mutex);
|
||||||
int32_t taosThreadMutexTimedLock(TdThreadMutex * mutex, const struct timespec *abstime);
|
// int32_t taosThreadMutexTimedLock(TdThreadMutex * mutex, const struct timespec *abstime);
|
||||||
int32_t taosThreadMutexTryLock(TdThreadMutex * mutex);
|
int32_t taosThreadMutexTryLock(TdThreadMutex * mutex);
|
||||||
int32_t taosThreadMutexUnlock(TdThreadMutex * mutex);
|
int32_t taosThreadMutexUnlock(TdThreadMutex * mutex);
|
||||||
int32_t taosThreadMutexAttrDestroy(TdThreadMutexAttr * attr);
|
int32_t taosThreadMutexAttrDestroy(TdThreadMutexAttr * attr);
|
||||||
int32_t taosThreadMutexAttrGetPshared(const TdThreadMutexAttr * attr, int32_t *pshared);
|
int32_t taosThreadMutexAttrGetPshared(const TdThreadMutexAttr * attr, int32_t *pshared);
|
||||||
int32_t taosThreadMutexAttrGetRobust(const TdThreadMutexAttr * attr, int32_t * robust);
|
// int32_t taosThreadMutexAttrGetRobust(const TdThreadMutexAttr * attr, int32_t * robust);
|
||||||
int32_t taosThreadMutexAttrGetType(const TdThreadMutexAttr * attr, int32_t *kind);
|
int32_t taosThreadMutexAttrGetType(const TdThreadMutexAttr * attr, int32_t *kind);
|
||||||
int32_t taosThreadMutexAttrInit(TdThreadMutexAttr * attr);
|
int32_t taosThreadMutexAttrInit(TdThreadMutexAttr * attr);
|
||||||
int32_t taosThreadMutexAttrSetPshared(TdThreadMutexAttr * attr, int32_t pshared);
|
int32_t taosThreadMutexAttrSetPshared(TdThreadMutexAttr * attr, int32_t pshared);
|
||||||
int32_t taosThreadMutexAttrSetRobust(TdThreadMutexAttr * attr, int32_t robust);
|
// int32_t taosThreadMutexAttrSetRobust(TdThreadMutexAttr * attr, int32_t robust);
|
||||||
int32_t taosThreadMutexAttrSetType(TdThreadMutexAttr * attr, int32_t kind);
|
int32_t taosThreadMutexAttrSetType(TdThreadMutexAttr * attr, int32_t kind);
|
||||||
int32_t taosThreadOnce(TdThreadOnce * onceControl, void(*initRoutine)(void));
|
int32_t taosThreadOnce(TdThreadOnce * onceControl, void(*initRoutine)(void));
|
||||||
int32_t taosThreadRwlockDestroy(TdThreadRwlock * rwlock);
|
int32_t taosThreadRwlockDestroy(TdThreadRwlock * rwlock);
|
||||||
int32_t taosThreadRwlockInit(TdThreadRwlock * rwlock, const TdThreadRwlockAttr * attr);
|
int32_t taosThreadRwlockInit(TdThreadRwlock * rwlock, const TdThreadRwlockAttr * attr);
|
||||||
int32_t taosThreadRwlockRdlock(TdThreadRwlock * rwlock);
|
int32_t taosThreadRwlockRdlock(TdThreadRwlock * rwlock);
|
||||||
int32_t taosThreadRwlockTimedRdlock(TdThreadRwlock * rwlock, const struct timespec *abstime);
|
// int32_t taosThreadRwlockTimedRdlock(TdThreadRwlock * rwlock, const struct timespec *abstime);
|
||||||
int32_t taosThreadRwlockTimedWrlock(TdThreadRwlock * rwlock, const struct timespec *abstime);
|
// int32_t taosThreadRwlockTimedWrlock(TdThreadRwlock * rwlock, const struct timespec *abstime);
|
||||||
int32_t taosThreadRwlockTryRdlock(TdThreadRwlock * rwlock);
|
int32_t taosThreadRwlockTryRdlock(TdThreadRwlock * rwlock);
|
||||||
int32_t taosThreadRwlockTryWrlock(TdThreadRwlock * rwlock);
|
int32_t taosThreadRwlockTryWrlock(TdThreadRwlock * rwlock);
|
||||||
int32_t taosThreadRwlockUnlock(TdThreadRwlock * rwlock);
|
int32_t taosThreadRwlockUnlock(TdThreadRwlock * rwlock);
|
||||||
|
|
|
@ -845,11 +845,7 @@ int32_t tsBufMerge(STSBuf* pDestBuf, const STSBuf* pSrcBuf) {
|
||||||
|
|
||||||
int64_t offset = getDataStartOffset();
|
int64_t offset = getDataStartOffset();
|
||||||
int32_t size = (int32_t)pSrcBuf->fileSize - (int32_t)offset;
|
int32_t size = (int32_t)pSrcBuf->fileSize - (int32_t)offset;
|
||||||
#if defined(_TD_DARWIN_64)
|
|
||||||
int64_t written = taosFSendFile(pDestBuf->pFile->fp, pSrcBuf->pFile->fp, &offset, size);
|
|
||||||
#else
|
|
||||||
int64_t written = taosFSendFile(pDestBuf->pFile, pSrcBuf->pFile, &offset, size);
|
int64_t written = taosFSendFile(pDestBuf->pFile, pSrcBuf->pFile, &offset, size);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (written == -1 || written != size) {
|
if (written == -1 || written != size) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -87,7 +87,7 @@ typedef struct {
|
||||||
} STelemMgmt;
|
} STelemMgmt;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
sem_t syncSem;
|
tsem_t syncSem;
|
||||||
int64_t sync;
|
int64_t sync;
|
||||||
bool standby;
|
bool standby;
|
||||||
SReplica replica;
|
SReplica replica;
|
||||||
|
|
|
@ -241,7 +241,7 @@ struct SVnode {
|
||||||
tsem_t canCommit;
|
tsem_t canCommit;
|
||||||
int64_t sync;
|
int64_t sync;
|
||||||
int32_t syncCount;
|
int32_t syncCount;
|
||||||
sem_t syncSem;
|
tsem_t syncSem;
|
||||||
SQHandle* pQuery;
|
SQHandle* pQuery;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -278,7 +278,7 @@ typedef struct SCtgAsyncFps {
|
||||||
|
|
||||||
typedef struct SCtgApiStat {
|
typedef struct SCtgApiStat {
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#if defined(WINDOWS) || defined(_TD_DARWIN_64)
|
||||||
size_t avoidCompilationErrors;
|
size_t avoidCompilationErrors;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,25 @@
|
||||||
|
|
||||||
MESSAGE(STATUS "build catalog unit test")
|
MESSAGE(STATUS "build catalog unit test")
|
||||||
|
|
||||||
# GoogleTest requires at least C++11
|
IF(NOT TD_DARWIN)
|
||||||
SET(CMAKE_CXX_STANDARD 11)
|
# GoogleTest requires at least C++11
|
||||||
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
ADD_EXECUTABLE(catalogTest ${SOURCE_LIST})
|
ADD_EXECUTABLE(catalogTest ${SOURCE_LIST})
|
||||||
TARGET_LINK_LIBRARIES(
|
TARGET_LINK_LIBRARIES(
|
||||||
catalogTest
|
catalogTest
|
||||||
PUBLIC os util common catalog transport gtest qcom taos_static
|
PUBLIC os util common catalog transport gtest qcom taos_static
|
||||||
)
|
)
|
||||||
|
|
||||||
TARGET_INCLUDE_DIRECTORIES(
|
TARGET_INCLUDE_DIRECTORIES(
|
||||||
catalogTest
|
catalogTest
|
||||||
PUBLIC "${TD_SOURCE_DIR}/include/libs/catalog/"
|
PUBLIC "${TD_SOURCE_DIR}/include/libs/catalog/"
|
||||||
PRIVATE "${TD_SOURCE_DIR}/source/libs/catalog/inc"
|
PRIVATE "${TD_SOURCE_DIR}/source/libs/catalog/inc"
|
||||||
)
|
)
|
||||||
|
|
||||||
# add_test(
|
# add_test(
|
||||||
# NAME catalogTest
|
# NAME catalogTest
|
||||||
# COMMAND catalogTest
|
# COMMAND catalogTest
|
||||||
# )
|
# )
|
||||||
|
ENDIF()
|
||||||
|
|
|
@ -35,7 +35,7 @@ int32_t dsDataSinkGetCacheSize(SDataSinkStat *pStat) {
|
||||||
|
|
||||||
|
|
||||||
int32_t dsCreateDataSinker(const SDataSinkNode *pDataSink, DataSinkHandle* pHandle, void* pParam) {
|
int32_t dsCreateDataSinker(const SDataSinkNode *pDataSink, DataSinkHandle* pHandle, void* pParam) {
|
||||||
switch (nodeType(pDataSink)) {
|
switch ((int)nodeType(pDataSink)) {
|
||||||
case QUERY_NODE_PHYSICAL_PLAN_DISPATCH:
|
case QUERY_NODE_PHYSICAL_PLAN_DISPATCH:
|
||||||
return createDataDispatcher(&gDataSinkManager, pDataSink, pHandle);
|
return createDataDispatcher(&gDataSinkManager, pDataSink, pHandle);
|
||||||
case QUERY_NODE_PHYSICAL_PLAN_DELETE:
|
case QUERY_NODE_PHYSICAL_PLAN_DELETE:
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
FstSparseSet *sparSetCreate(int32_t sz) {
|
FstSparseSet *sparSetCreate(int32_t sz) {
|
||||||
FstSparseSet *ss = taosMemoryCalloc(1, sizeof(FstSparseSet));
|
FstSparseSet *ss = taosMemoryCalloc(1, sizeof(FstSparseSet));
|
||||||
if (ss = NULL) {
|
if (ss == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,18 +75,18 @@ void MonitorTest::GetSysInfo(SMonSysInfo *pInfo) {
|
||||||
pInfo->cpu_engine = 2.1;
|
pInfo->cpu_engine = 2.1;
|
||||||
pInfo->cpu_system = 2.1;
|
pInfo->cpu_system = 2.1;
|
||||||
pInfo->cpu_cores = 2;
|
pInfo->cpu_cores = 2;
|
||||||
pInfo->mem_engine = 3.1;
|
pInfo->mem_engine = 3;
|
||||||
pInfo->mem_system = 3.2;
|
pInfo->mem_system = 3;
|
||||||
pInfo->mem_total = 3.3;
|
pInfo->mem_total = 3;
|
||||||
pInfo->disk_engine = 4.1;
|
pInfo->disk_engine = 4;
|
||||||
pInfo->disk_used = 4.2;
|
pInfo->disk_used = 4;
|
||||||
pInfo->disk_total = 4.3;
|
pInfo->disk_total = 4;
|
||||||
pInfo->net_in = 5.1;
|
pInfo->net_in = 5;
|
||||||
pInfo->net_out = 5.2;
|
pInfo->net_out = 5;
|
||||||
pInfo->io_read = 6.1;
|
pInfo->io_read = 6;
|
||||||
pInfo->io_write = 6.2;
|
pInfo->io_write = 6;
|
||||||
pInfo->io_read_disk = 7.1;
|
pInfo->io_read_disk = 7;
|
||||||
pInfo->io_write_disk = 7.2;
|
pInfo->io_write_disk = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MonitorTest::GetClusterInfo(SMonClusterInfo *pInfo) {
|
void MonitorTest::GetClusterInfo(SMonClusterInfo *pInfo) {
|
||||||
|
|
|
@ -1,32 +1,34 @@
|
||||||
|
|
||||||
MESSAGE(STATUS "build parser unit test")
|
MESSAGE(STATUS "build parser unit test")
|
||||||
|
|
||||||
# GoogleTest requires at least C++11
|
IF(NOT TD_DARWIN)
|
||||||
SET(CMAKE_CXX_STANDARD 11)
|
# GoogleTest requires at least C++11
|
||||||
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
ADD_EXECUTABLE(parserTest ${SOURCE_LIST})
|
ADD_EXECUTABLE(parserTest ${SOURCE_LIST})
|
||||||
|
|
||||||
TARGET_INCLUDE_DIRECTORIES(
|
TARGET_INCLUDE_DIRECTORIES(
|
||||||
parserTest
|
parserTest
|
||||||
PUBLIC "${TD_SOURCE_DIR}/include/libs/parser/"
|
PUBLIC "${TD_SOURCE_DIR}/include/libs/parser/"
|
||||||
PRIVATE "${TD_SOURCE_DIR}/source/libs/parser/inc"
|
PRIVATE "${TD_SOURCE_DIR}/source/libs/parser/inc"
|
||||||
)
|
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES(
|
|
||||||
parserTest
|
|
||||||
PUBLIC os util common nodes parser catalog transport gtest function planner qcom
|
|
||||||
)
|
|
||||||
|
|
||||||
if(${BUILD_WINGETOPT})
|
|
||||||
target_include_directories(
|
|
||||||
parserTest
|
|
||||||
PUBLIC "${TD_SOURCE_DIR}/contrib/wingetopt/src"
|
|
||||||
)
|
)
|
||||||
target_link_libraries(parserTest PUBLIC wingetopt)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_test(
|
TARGET_LINK_LIBRARIES(
|
||||||
NAME parserTest
|
parserTest
|
||||||
COMMAND parserTest
|
PUBLIC os util common nodes parser catalog transport gtest function planner qcom
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(${BUILD_WINGETOPT})
|
||||||
|
target_include_directories(
|
||||||
|
parserTest
|
||||||
|
PUBLIC "${TD_SOURCE_DIR}/contrib/wingetopt/src"
|
||||||
|
)
|
||||||
|
target_link_libraries(parserTest PUBLIC wingetopt)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_test(
|
||||||
|
NAME parserTest
|
||||||
|
COMMAND parserTest
|
||||||
|
)
|
||||||
|
ENDIF()
|
|
@ -1,18 +1,19 @@
|
||||||
|
|
||||||
MESSAGE(STATUS "build qworker unit test")
|
MESSAGE(STATUS "build qworker unit test")
|
||||||
|
IF(NOT TD_DARWIN)
|
||||||
|
# GoogleTest requires at least C++11
|
||||||
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
# GoogleTest requires at least C++11
|
ADD_EXECUTABLE(qworkerTest ${SOURCE_LIST})
|
||||||
SET(CMAKE_CXX_STANDARD 11)
|
TARGET_LINK_LIBRARIES(
|
||||||
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
qworkerTest
|
||||||
|
PUBLIC os util common transport gtest qcom nodes planner qworker executor
|
||||||
|
)
|
||||||
|
|
||||||
ADD_EXECUTABLE(qworkerTest ${SOURCE_LIST})
|
TARGET_INCLUDE_DIRECTORIES(
|
||||||
TARGET_LINK_LIBRARIES(
|
qworkerTest
|
||||||
qworkerTest
|
PUBLIC "${TD_SOURCE_DIR}/include/libs/qworker/"
|
||||||
PUBLIC os util common transport gtest qcom nodes planner qworker executor
|
PRIVATE "${TD_SOURCE_DIR}/source/libs/qworker/inc"
|
||||||
)
|
)
|
||||||
|
ENDIF()
|
||||||
TARGET_INCLUDE_DIRECTORIES(
|
|
||||||
qworkerTest
|
|
||||||
PUBLIC "${TD_SOURCE_DIR}/include/libs/qworker/"
|
|
||||||
PRIVATE "${TD_SOURCE_DIR}/source/libs/qworker/inc"
|
|
||||||
)
|
|
||||||
|
|
|
@ -345,7 +345,7 @@ int32_t sclGetNodeType(SNode *pNode, SScalarCtx *ctx) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (nodeType(pNode)) {
|
switch ((int)nodeType(pNode)) {
|
||||||
case QUERY_NODE_VALUE: {
|
case QUERY_NODE_VALUE: {
|
||||||
SValueNode *valueNode = (SValueNode *)pNode;
|
SValueNode *valueNode = (SValueNode *)pNode;
|
||||||
return valueNode->node.resType.type;
|
return valueNode->node.resType.type;
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
|
|
||||||
MESSAGE(STATUS "build filter unit test")
|
MESSAGE(STATUS "build filter unit test")
|
||||||
|
|
||||||
# GoogleTest requires at least C++11
|
IF(NOT TD_DARWIN)
|
||||||
SET(CMAKE_CXX_STANDARD 11)
|
# GoogleTest requires at least C++11
|
||||||
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
ADD_EXECUTABLE(filterTest ${SOURCE_LIST})
|
ADD_EXECUTABLE(filterTest ${SOURCE_LIST})
|
||||||
TARGET_LINK_LIBRARIES(
|
TARGET_LINK_LIBRARIES(
|
||||||
filterTest
|
filterTest
|
||||||
PUBLIC os util common gtest qcom function nodes scalar
|
PUBLIC os util common gtest qcom function nodes scalar
|
||||||
)
|
)
|
||||||
|
|
||||||
TARGET_INCLUDE_DIRECTORIES(
|
TARGET_INCLUDE_DIRECTORIES(
|
||||||
filterTest
|
filterTest
|
||||||
PUBLIC "${TD_SOURCE_DIR}/include/libs/scalar/"
|
PUBLIC "${TD_SOURCE_DIR}/include/libs/scalar/"
|
||||||
PRIVATE "${TD_SOURCE_DIR}/source/libs/scalar/inc"
|
PRIVATE "${TD_SOURCE_DIR}/source/libs/scalar/inc"
|
||||||
)
|
)
|
||||||
|
ENDIF()
|
|
@ -1,23 +1,25 @@
|
||||||
|
|
||||||
MESSAGE(STATUS "build scalar unit test")
|
MESSAGE(STATUS "build scalar unit test")
|
||||||
|
|
||||||
# GoogleTest requires at least C++11
|
IF(NOT TD_DARWIN)
|
||||||
SET(CMAKE_CXX_STANDARD 11)
|
# GoogleTest requires at least C++11
|
||||||
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
ADD_EXECUTABLE(scalarTest ${SOURCE_LIST})
|
ADD_EXECUTABLE(scalarTest ${SOURCE_LIST})
|
||||||
TARGET_LINK_LIBRARIES(
|
TARGET_LINK_LIBRARIES(
|
||||||
scalarTest
|
scalarTest
|
||||||
PUBLIC os util common gtest qcom function nodes scalar parser catalog transport
|
PUBLIC os util common gtest qcom function nodes scalar parser catalog transport
|
||||||
)
|
)
|
||||||
|
|
||||||
TARGET_INCLUDE_DIRECTORIES(
|
TARGET_INCLUDE_DIRECTORIES(
|
||||||
scalarTest
|
scalarTest
|
||||||
PUBLIC "${TD_SOURCE_DIR}/include/libs/scalar/"
|
PUBLIC "${TD_SOURCE_DIR}/include/libs/scalar/"
|
||||||
PUBLIC "${TD_SOURCE_DIR}/source/libs/parser/inc"
|
PUBLIC "${TD_SOURCE_DIR}/source/libs/parser/inc"
|
||||||
PRIVATE "${TD_SOURCE_DIR}/source/libs/scalar/inc"
|
PRIVATE "${TD_SOURCE_DIR}/source/libs/scalar/inc"
|
||||||
)
|
)
|
||||||
add_test(
|
add_test(
|
||||||
NAME scalarTest
|
NAME scalarTest
|
||||||
COMMAND scalarTest
|
COMMAND scalarTest
|
||||||
)
|
)
|
||||||
|
ENDIF()
|
||||||
|
|
|
@ -68,7 +68,7 @@ typedef struct SSchHbTrans {
|
||||||
|
|
||||||
typedef struct SSchApiStat {
|
typedef struct SSchApiStat {
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#if defined(WINDOWS) || defined(_TD_DARWIN_64)
|
||||||
size_t avoidCompilationErrors;
|
size_t avoidCompilationErrors;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ typedef struct SSchApiStat {
|
||||||
|
|
||||||
typedef struct SSchRuntimeStat {
|
typedef struct SSchRuntimeStat {
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#if defined(WINDOWS) || defined(_TD_DARWIN_64)
|
||||||
size_t avoidCompilationErrors;
|
size_t avoidCompilationErrors;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ typedef struct SSchRuntimeStat {
|
||||||
|
|
||||||
typedef struct SSchJobStat {
|
typedef struct SSchJobStat {
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#if defined(WINDOWS) || defined(_TD_DARWIN_64)
|
||||||
size_t avoidCompilationErrors;
|
size_t avoidCompilationErrors;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
|
|
||||||
MESSAGE(STATUS "build scheduler unit test")
|
MESSAGE(STATUS "build scheduler unit test")
|
||||||
|
|
||||||
# GoogleTest requires at least C++11
|
IF(NOT TD_DARWIN)
|
||||||
SET(CMAKE_CXX_STANDARD 11)
|
# GoogleTest requires at least C++11
|
||||||
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
ADD_EXECUTABLE(schedulerTest ${SOURCE_LIST})
|
ADD_EXECUTABLE(schedulerTest ${SOURCE_LIST})
|
||||||
TARGET_LINK_LIBRARIES(
|
TARGET_LINK_LIBRARIES(
|
||||||
schedulerTest
|
schedulerTest
|
||||||
PUBLIC os util common catalog transport gtest qcom taos_static planner scheduler
|
PUBLIC os util common catalog transport gtest qcom taos_static planner scheduler
|
||||||
)
|
)
|
||||||
|
|
||||||
TARGET_INCLUDE_DIRECTORIES(
|
TARGET_INCLUDE_DIRECTORIES(
|
||||||
schedulerTest
|
schedulerTest
|
||||||
PUBLIC "${TD_SOURCE_DIR}/include/libs/scheduler/"
|
PUBLIC "${TD_SOURCE_DIR}/include/libs/scheduler/"
|
||||||
PRIVATE "${TD_SOURCE_DIR}/source/libs/scheduler/inc"
|
PRIVATE "${TD_SOURCE_DIR}/source/libs/scheduler/inc"
|
||||||
)
|
)
|
||||||
|
ENDIF()
|
|
@ -18,7 +18,7 @@
|
||||||
int tdbTxnOpen(TXN *pTxn, int64_t txnid, void *(*xMalloc)(void *, size_t), void (*xFree)(void *, void *), void *xArg,
|
int tdbTxnOpen(TXN *pTxn, int64_t txnid, void *(*xMalloc)(void *, size_t), void (*xFree)(void *, void *), void *xArg,
|
||||||
int flags) {
|
int flags) {
|
||||||
// not support read-committed version at the moment
|
// not support read-committed version at the moment
|
||||||
ASSERT(flags == 0 || flags == TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED);
|
ASSERT(flags == 0 || flags == (TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED));
|
||||||
|
|
||||||
pTxn->flags = flags;
|
pTxn->flags = flags;
|
||||||
pTxn->txnId = txnid;
|
pTxn->txnId = txnid;
|
||||||
|
|
|
@ -39,12 +39,16 @@ endif()
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
os PUBLIC pthread
|
os PUBLIC pthread
|
||||||
)
|
)
|
||||||
if(NOT TD_WINDOWS)
|
if(TD_WINDOWS)
|
||||||
target_link_libraries(
|
|
||||||
os PUBLIC dl m rt
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
os PUBLIC ws2_32 iconv msvcregex wcwidth winmm
|
os PUBLIC ws2_32 iconv msvcregex wcwidth winmm
|
||||||
)
|
)
|
||||||
endif(NOT TD_WINDOWS)
|
elseif(TD_DARWIN_64)
|
||||||
|
target_link_libraries(
|
||||||
|
os PUBLIC dl m iconv
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
target_link_libraries(
|
||||||
|
os PUBLIC dl m rt
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
|
@ -518,7 +518,7 @@ int64_t atomic_add_fetch_64(int64_t volatile *ptr, int64_t val) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void* atomic_add_fetch_ptr(void *ptr, void *val) {
|
void* atomic_add_fetch_ptr(void *ptr, int64_t val) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
return interlocked_add_fetch_ptr((void* volatile*)(ptr), (void*)(val));
|
return interlocked_add_fetch_ptr((void* volatile*)(ptr), (void*)(val));
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
|
@ -618,11 +618,13 @@ int64_t atomic_sub_fetch_64(int64_t volatile *ptr, int64_t val) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void* atomic_sub_fetch_ptr(void *ptr, void* val) {
|
void* atomic_sub_fetch_ptr(void *ptr, int64_t val) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
return interlocked_sub_fetch_ptr(ptr, val);
|
return interlocked_sub_fetch_ptr(ptr, val);
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
return __sync_sub_and_fetch((ptr), (val));
|
return __sync_sub_and_fetch((ptr), (val));
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return __atomic_sub_fetch((void **)(ptr), (size_t)(val), __ATOMIC_SEQ_CST);
|
||||||
#else
|
#else
|
||||||
return __atomic_sub_fetch((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
return __atomic_sub_fetch((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
||||||
#endif
|
#endif
|
||||||
|
@ -673,6 +675,8 @@ void* atomic_fetch_sub_ptr(void *ptr, void* val) {
|
||||||
return interlocked_fetch_sub_ptr(ptr, val);
|
return interlocked_fetch_sub_ptr(ptr, val);
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
return __sync_fetch_and_sub((ptr), (val));
|
return __sync_fetch_and_sub((ptr), (val));
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return __atomic_fetch_sub((void **)(ptr), (size_t)(val), __ATOMIC_SEQ_CST);
|
||||||
#else
|
#else
|
||||||
return __atomic_fetch_sub((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
return __atomic_fetch_sub((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
||||||
#endif
|
#endif
|
||||||
|
@ -723,6 +727,8 @@ void* atomic_and_fetch_ptr(void *ptr, void *val) {
|
||||||
return interlocked_and_fetch_ptr((void* volatile*)(ptr), (void*)(val));
|
return interlocked_and_fetch_ptr((void* volatile*)(ptr), (void*)(val));
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
return __sync_and_and_fetch((ptr), (val));
|
return __sync_and_and_fetch((ptr), (val));
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return (void*)__atomic_and_fetch((size_t *)(ptr), (size_t)(val), __ATOMIC_SEQ_CST);
|
||||||
#else
|
#else
|
||||||
return __atomic_and_fetch((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
return __atomic_and_fetch((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
||||||
#endif
|
#endif
|
||||||
|
@ -773,6 +779,8 @@ void* atomic_fetch_and_ptr(void *ptr, void *val) {
|
||||||
return interlocked_fetch_and_ptr((void* volatile*)(ptr), (void*)(val));
|
return interlocked_fetch_and_ptr((void* volatile*)(ptr), (void*)(val));
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
return __sync_fetch_and_and((ptr), (val));
|
return __sync_fetch_and_and((ptr), (val));
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return (void*)__atomic_fetch_and((size_t *)(ptr), (size_t)(val), __ATOMIC_SEQ_CST);
|
||||||
#else
|
#else
|
||||||
return __atomic_fetch_and((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
return __atomic_fetch_and((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
||||||
#endif
|
#endif
|
||||||
|
@ -823,6 +831,8 @@ void* atomic_or_fetch_ptr(void *ptr, void *val) {
|
||||||
return interlocked_or_fetch_ptr((void* volatile*)(ptr), (void*)(val));
|
return interlocked_or_fetch_ptr((void* volatile*)(ptr), (void*)(val));
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
return __sync_or_and_fetch((ptr), (val));
|
return __sync_or_and_fetch((ptr), (val));
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return (void*)__atomic_or_fetch((size_t *)(ptr), (size_t)(val), __ATOMIC_SEQ_CST);
|
||||||
#else
|
#else
|
||||||
return __atomic_or_fetch((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
return __atomic_or_fetch((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
||||||
#endif
|
#endif
|
||||||
|
@ -873,6 +883,8 @@ void* atomic_fetch_or_ptr(void *ptr, void *val) {
|
||||||
return interlocked_fetch_or_ptr((void* volatile*)(ptr), (void*)(val));
|
return interlocked_fetch_or_ptr((void* volatile*)(ptr), (void*)(val));
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
return __sync_fetch_and_or((ptr), (val));
|
return __sync_fetch_and_or((ptr), (val));
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return (void*)__atomic_fetch_or((size_t *)(ptr), (size_t)(val), __ATOMIC_SEQ_CST);
|
||||||
#else
|
#else
|
||||||
return __atomic_fetch_or((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
return __atomic_fetch_or((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
||||||
#endif
|
#endif
|
||||||
|
@ -923,6 +935,8 @@ void* atomic_xor_fetch_ptr(void *ptr, void *val) {
|
||||||
return interlocked_xor_fetch_ptr((void* volatile*)(ptr), (void*)(val));
|
return interlocked_xor_fetch_ptr((void* volatile*)(ptr), (void*)(val));
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
return __sync_xor_and_fetch((ptr), (val));
|
return __sync_xor_and_fetch((ptr), (val));
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return (void*)__atomic_xor_fetch((size_t *)(ptr), (size_t)(val), __ATOMIC_SEQ_CST);
|
||||||
#else
|
#else
|
||||||
return __atomic_xor_fetch((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
return __atomic_xor_fetch((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
||||||
#endif
|
#endif
|
||||||
|
@ -973,6 +987,8 @@ void* atomic_fetch_xor_ptr(void *ptr, void *val) {
|
||||||
return interlocked_fetch_xor_ptr((void* volatile*)(ptr), (void*)(val));
|
return interlocked_fetch_xor_ptr((void* volatile*)(ptr), (void*)(val));
|
||||||
#elif defined(_TD_NINGSI_60)
|
#elif defined(_TD_NINGSI_60)
|
||||||
return __sync_fetch_and_xor((ptr), (val));
|
return __sync_fetch_and_xor((ptr), (val));
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return (void*)__atomic_fetch_xor((size_t *)(ptr), (size_t)(val), __ATOMIC_SEQ_CST);
|
||||||
#else
|
#else
|
||||||
return __atomic_fetch_xor((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
return __atomic_fetch_xor((void **)(ptr), (val), __ATOMIC_SEQ_CST);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#define LINUX_FILE_NO_TEXT_OPTION 0
|
#define LINUX_FILE_NO_TEXT_OPTION 0
|
||||||
#define O_TEXT LINUX_FILE_NO_TEXT_OPTION
|
#define O_TEXT LINUX_FILE_NO_TEXT_OPTION
|
||||||
|
|
||||||
|
#define _SEND_FILE_STEP_ 1000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WINDOWS)
|
#if defined(WINDOWS)
|
||||||
|
@ -612,28 +614,34 @@ int64_t taosFSendFile(TdFilePtr pFileOut, TdFilePtr pFileIn, int64_t *offset, in
|
||||||
|
|
||||||
#elif defined(_TD_DARWIN_64)
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
|
||||||
int r = 0;
|
lseek(pFileIn->fd, (int32_t)(*offset), 0);
|
||||||
if (offset) {
|
int64_t writeLen = 0;
|
||||||
r = fseek(in_file, *offset, SEEK_SET);
|
uint8_t buffer[_SEND_FILE_STEP_] = {0};
|
||||||
if (r == -1) return -1;
|
|
||||||
}
|
for (int64_t len = 0; len < (size - _SEND_FILE_STEP_); len += _SEND_FILE_STEP_) {
|
||||||
off_t len = size;
|
size_t rlen = read(pFileIn->fd, (void *)buffer, _SEND_FILE_STEP_);
|
||||||
while (len > 0) {
|
if (rlen <= 0) {
|
||||||
char buf[1024 * 16];
|
return writeLen;
|
||||||
off_t n = sizeof(buf);
|
} else if (rlen < _SEND_FILE_STEP_) {
|
||||||
if (len < n) n = len;
|
write(pFileOut->fd, (void *)buffer, (uint32_t)rlen);
|
||||||
size_t m = fread(buf, 1, n, in_file);
|
return (int64_t)(writeLen + rlen);
|
||||||
if (m < n) {
|
} else {
|
||||||
int e = ferror(in_file);
|
write(pFileOut->fd, (void *)buffer, _SEND_FILE_STEP_);
|
||||||
if (e) return -1;
|
writeLen += _SEND_FILE_STEP_;
|
||||||
}
|
}
|
||||||
if (m == 0) break;
|
|
||||||
if (m != fwrite(buf, 1, m, out_file)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
len -= m;
|
|
||||||
}
|
}
|
||||||
return size - len;
|
|
||||||
|
int64_t remain = size - writeLen;
|
||||||
|
if (remain > 0) {
|
||||||
|
size_t rlen = read(pFileIn->fd, (void *)buffer, (size_t)remain);
|
||||||
|
if (rlen <= 0) {
|
||||||
|
return writeLen;
|
||||||
|
} else {
|
||||||
|
write(pFileOut->fd, (void *)buffer, (uint32_t)remain);
|
||||||
|
writeLen += remain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return writeLen;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ALLOW_FORBID_FUNC
|
#define ALLOW_FORBID_FUNC
|
||||||
|
#ifdef _TD_DARWIN_64
|
||||||
|
#include <malloc/malloc.h>
|
||||||
|
#else
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
|
||||||
#if defined(USE_TD_MEMORY) || defined(USE_ADDR2LINE)
|
#if defined(USE_TD_MEMORY) || defined(USE_ADDR2LINE)
|
||||||
|
@ -323,6 +327,8 @@ int32_t taosMemorySize(void *ptr) {
|
||||||
#else
|
#else
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
return _msize(ptr);
|
return _msize(ptr);
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
return malloc_size(ptr);
|
||||||
#else
|
#else
|
||||||
return malloc_usable_size(ptr);
|
return malloc_usable_size(ptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,8 +13,10 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define ALLOW_FORBID_FUNC
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
#include "pthread.h"
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
|
|
||||||
|
@ -111,289 +113,501 @@ int32_t tsem_timewait(tsem_t* sem, int64_t nanosecs) {
|
||||||
|
|
||||||
// #define SEM_USE_PTHREAD
|
// #define SEM_USE_PTHREAD
|
||||||
// #define SEM_USE_POSIX
|
// #define SEM_USE_POSIX
|
||||||
#define SEM_USE_SEM
|
// #define SEM_USE_SEM
|
||||||
|
|
||||||
#ifdef SEM_USE_SEM
|
// #ifdef SEM_USE_SEM
|
||||||
#include <mach/mach_error.h>
|
// #include <mach/mach_error.h>
|
||||||
#include <mach/mach_init.h>
|
// #include <mach/mach_init.h>
|
||||||
#include <mach/semaphore.h>
|
// #include <mach/semaphore.h>
|
||||||
#include <mach/task.h>
|
// #include <mach/task.h>
|
||||||
|
|
||||||
static TdThread sem_thread;
|
// static TdThread sem_thread;
|
||||||
static TdThreadOnce sem_once;
|
// static TdThreadOnce sem_once;
|
||||||
static task_t sem_port;
|
// static task_t sem_port;
|
||||||
static volatile int sem_inited = 0;
|
// static volatile int sem_inited = 0;
|
||||||
static semaphore_t sem_exit;
|
// static semaphore_t sem_exit;
|
||||||
|
|
||||||
static void *sem_thread_routine(void *arg) {
|
// static void *sem_thread_routine(void *arg) {
|
||||||
(void)arg;
|
// (void)arg;
|
||||||
setThreadName("sem_thrd");
|
// setThreadName("sem_thrd");
|
||||||
|
|
||||||
sem_port = mach_task_self();
|
// sem_port = mach_task_self();
|
||||||
kern_return_t ret = semaphore_create(sem_port, &sem_exit, SYNC_POLICY_FIFO, 0);
|
// kern_return_t ret = semaphore_create(sem_port, &sem_exit, SYNC_POLICY_FIFO, 0);
|
||||||
if (ret != KERN_SUCCESS) {
|
// if (ret != KERN_SUCCESS) {
|
||||||
fprintf(stderr, "==%s[%d]%s()==failed to create sem_exit\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__);
|
// fprintf(stderr, "==%s[%d]%s()==failed to create sem_exit\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__);
|
||||||
sem_inited = -1;
|
// sem_inited = -1;
|
||||||
return NULL;
|
// return NULL;
|
||||||
}
|
// }
|
||||||
sem_inited = 1;
|
// sem_inited = 1;
|
||||||
semaphore_wait(sem_exit);
|
// semaphore_wait(sem_exit);
|
||||||
return NULL;
|
// return NULL;
|
||||||
}
|
// }
|
||||||
|
|
||||||
static void once_init(void) {
|
// static void once_init(void) {
|
||||||
int r = 0;
|
// int r = 0;
|
||||||
r = taosThreadCreate(&sem_thread, NULL, sem_thread_routine, NULL);
|
// r = taosThreadCreate(&sem_thread, NULL, sem_thread_routine, NULL);
|
||||||
if (r) {
|
// if (r) {
|
||||||
fprintf(stderr, "==%s[%d]%s()==failed to create thread\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__);
|
// fprintf(stderr, "==%s[%d]%s()==failed to create thread\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__);
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
while (sem_inited == 0) {
|
// while (sem_inited == 0) {
|
||||||
;
|
// ;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
#endif
|
// #endif
|
||||||
|
|
||||||
struct tsem_s {
|
// struct tsem_s {
|
||||||
#ifdef SEM_USE_PTHREAD
|
// #ifdef SEM_USE_PTHREAD
|
||||||
TdThreadMutex lock;
|
// TdThreadMutex lock;
|
||||||
TdThreadCond cond;
|
// TdThreadCond cond;
|
||||||
volatile int64_t val;
|
// volatile int64_t val;
|
||||||
#elif defined(SEM_USE_POSIX)
|
// #elif defined(SEM_USE_POSIX)
|
||||||
size_t id;
|
// size_t id;
|
||||||
sem_t *sem;
|
// sem_t *sem;
|
||||||
#elif defined(SEM_USE_SEM)
|
// #elif defined(SEM_USE_SEM)
|
||||||
semaphore_t sem;
|
// semaphore_t sem;
|
||||||
#else // SEM_USE_PTHREAD
|
// #else // SEM_USE_PTHREAD
|
||||||
dispatch_semaphore_t sem;
|
// dispatch_semaphore_t sem;
|
||||||
#endif // SEM_USE_PTHREAD
|
// #endif // SEM_USE_PTHREAD
|
||||||
|
|
||||||
volatile unsigned int valid : 1;
|
// volatile unsigned int valid : 1;
|
||||||
};
|
// };
|
||||||
|
|
||||||
int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
|
// int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
|
||||||
// fprintf(stderr, "==%s[%d]%s():[%p]==creating\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
// // fprintf(stderr, "==%s[%d]%s():[%p]==creating\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
if (*sem) {
|
// if (*sem) {
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==already initialized\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
// fprintf(stderr, "==%s[%d]%s():[%p]==already initialized\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
sem);
|
// sem);
|
||||||
abort();
|
// abort();
|
||||||
}
|
// }
|
||||||
struct tsem_s *p = (struct tsem_s *)taosMemoryCalloc(1, sizeof(*p));
|
// struct tsem_s *p = (struct tsem_s *)taosMemoryCalloc(1, sizeof(*p));
|
||||||
if (!p) {
|
// if (!p) {
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==out of memory\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
// fprintf(stderr, "==%s[%d]%s():[%p]==out of memory\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
abort();
|
// abort();
|
||||||
}
|
// }
|
||||||
|
|
||||||
#ifdef SEM_USE_PTHREAD
|
// #ifdef SEM_USE_PTHREAD
|
||||||
int r = taosThreadMutexInit(&p->lock, NULL);
|
// int r = taosThreadMutexInit(&p->lock, NULL);
|
||||||
do {
|
// do {
|
||||||
if (r) break;
|
// if (r) break;
|
||||||
r = taosThreadCondInit(&p->cond, NULL);
|
// r = taosThreadCondInit(&p->cond, NULL);
|
||||||
if (r) {
|
// if (r) {
|
||||||
taosThreadMutexDestroy(&p->lock);
|
// taosThreadMutexDestroy(&p->lock);
|
||||||
break;
|
// break;
|
||||||
|
// }
|
||||||
|
// p->val = value;
|
||||||
|
// } while (0);
|
||||||
|
// if (r) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==not created\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// #elif defined(SEM_USE_POSIX)
|
||||||
|
// static size_t tick = 0;
|
||||||
|
// do {
|
||||||
|
// size_t id = atomic_add_fetch_64(&tick, 1);
|
||||||
|
// if (id == SEM_VALUE_MAX) {
|
||||||
|
// atomic_store_64(&tick, 0);
|
||||||
|
// id = 0;
|
||||||
|
// }
|
||||||
|
// char name[NAME_MAX - 4];
|
||||||
|
// snprintf(name, sizeof(name), "/t%ld", id);
|
||||||
|
// p->sem = sem_open(name, O_CREAT | O_EXCL, pshared, value);
|
||||||
|
// p->id = id;
|
||||||
|
// if (p->sem != SEM_FAILED) break;
|
||||||
|
// int e = errno;
|
||||||
|
// if (e == EEXIST) continue;
|
||||||
|
// if (e == EINTR) continue;
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==not created[%d]%s\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem,
|
||||||
|
// e, strerror(e));
|
||||||
|
// abort();
|
||||||
|
// } while (p->sem == SEM_FAILED);
|
||||||
|
// #elif defined(SEM_USE_SEM)
|
||||||
|
// taosThreadOnce(&sem_once, once_init);
|
||||||
|
// if (sem_inited != 1) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal resource init failed\n", taosDirEntryBaseName(__FILE__), __LINE__,
|
||||||
|
// __func__, sem);
|
||||||
|
// errno = ENOMEM;
|
||||||
|
// return -1;
|
||||||
|
// }
|
||||||
|
// kern_return_t ret = semaphore_create(sem_port, &p->sem, SYNC_POLICY_FIFO, value);
|
||||||
|
// if (ret != KERN_SUCCESS) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==semophore_create failed\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// // we fail-fast here, because we have less-doc about semaphore_create for the moment
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// #else // SEM_USE_PTHREAD
|
||||||
|
// p->sem = dispatch_semaphore_create(value);
|
||||||
|
// if (p->sem == NULL) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==not created\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// #endif // SEM_USE_PTHREAD
|
||||||
|
|
||||||
|
// p->valid = 1;
|
||||||
|
|
||||||
|
// *sem = p;
|
||||||
|
|
||||||
|
// return 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// int tsem_wait(tsem_t *sem) {
|
||||||
|
// if (!*sem) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// struct tsem_s *p = *sem;
|
||||||
|
// if (!p->valid) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==already destroyed\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// #ifdef SEM_USE_PTHREAD
|
||||||
|
// if (taosThreadMutexLock(&p->lock)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// p->val -= 1;
|
||||||
|
// if (p->val < 0) {
|
||||||
|
// if (taosThreadCondWait(&p->cond, &p->lock)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (taosThreadMutexUnlock(&p->lock)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// return 0;
|
||||||
|
// #elif defined(SEM_USE_POSIX)
|
||||||
|
// return sem_wait(p->sem);
|
||||||
|
// #elif defined(SEM_USE_SEM)
|
||||||
|
// return semaphore_wait(p->sem);
|
||||||
|
// #else // SEM_USE_PTHREAD
|
||||||
|
// return dispatch_semaphore_wait(p->sem, DISPATCH_TIME_FOREVER);
|
||||||
|
// #endif // SEM_USE_PTHREAD
|
||||||
|
// }
|
||||||
|
|
||||||
|
// int tsem_post(tsem_t *sem) {
|
||||||
|
// if (!*sem) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// struct tsem_s *p = *sem;
|
||||||
|
// if (!p->valid) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==already destroyed\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// #ifdef SEM_USE_PTHREAD
|
||||||
|
// if (taosThreadMutexLock(&p->lock)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// p->val += 1;
|
||||||
|
// if (p->val <= 0) {
|
||||||
|
// if (taosThreadCondSignal(&p->cond)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (taosThreadMutexUnlock(&p->lock)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// return 0;
|
||||||
|
// #elif defined(SEM_USE_POSIX)
|
||||||
|
// return sem_post(p->sem);
|
||||||
|
// #elif defined(SEM_USE_SEM)
|
||||||
|
// return semaphore_signal(p->sem);
|
||||||
|
// #else // SEM_USE_PTHREAD
|
||||||
|
// return dispatch_semaphore_signal(p->sem);
|
||||||
|
// #endif // SEM_USE_PTHREAD
|
||||||
|
// }
|
||||||
|
|
||||||
|
// int tsem_destroy(tsem_t *sem) {
|
||||||
|
// // fprintf(stderr, "==%s[%d]%s():[%p]==destroying\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
|
// if (!*sem) {
|
||||||
|
// // fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
||||||
|
// // abort();
|
||||||
|
// return 0;
|
||||||
|
// }
|
||||||
|
// struct tsem_s *p = *sem;
|
||||||
|
// if (!p->valid) {
|
||||||
|
// // fprintf(stderr, "==%s[%d]%s():[%p]==already destroyed\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// // sem); abort();
|
||||||
|
// return 0;
|
||||||
|
// }
|
||||||
|
// #ifdef SEM_USE_PTHREAD
|
||||||
|
// if (taosThreadMutexLock(&p->lock)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// p->valid = 0;
|
||||||
|
// if (taosThreadCondDestroy(&p->cond)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// if (taosThreadMutexUnlock(&p->lock)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// if (taosThreadMutexDestroy(&p->lock)) {
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
||||||
|
// sem);
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// #elif defined(SEM_USE_POSIX)
|
||||||
|
// char name[NAME_MAX - 4];
|
||||||
|
// snprintf(name, sizeof(name), "/t%ld", p->id);
|
||||||
|
// int r = sem_unlink(name);
|
||||||
|
// if (r) {
|
||||||
|
// int e = errno;
|
||||||
|
// fprintf(stderr, "==%s[%d]%s():[%p]==unlink failed[%d]%s\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem,
|
||||||
|
// e, strerror(e));
|
||||||
|
// abort();
|
||||||
|
// }
|
||||||
|
// #elif defined(SEM_USE_SEM)
|
||||||
|
// semaphore_destroy(sem_port, p->sem);
|
||||||
|
// #else // SEM_USE_PTHREAD
|
||||||
|
// #endif // SEM_USE_PTHREAD
|
||||||
|
|
||||||
|
// p->valid = 0;
|
||||||
|
// taosMemoryFree(p);
|
||||||
|
|
||||||
|
// *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;
|
||||||
}
|
}
|
||||||
p->val = value;
|
result = pthread_mutex_init(&pnewsem->count_lock, NULL);
|
||||||
} while (0);
|
if (result)
|
||||||
if (r) {
|
{
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==not created\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
free(pnewsem);
|
||||||
abort();
|
return result;
|
||||||
}
|
|
||||||
#elif defined(SEM_USE_POSIX)
|
|
||||||
static size_t tick = 0;
|
|
||||||
do {
|
|
||||||
size_t id = atomic_add_fetch_64(&tick, 1);
|
|
||||||
if (id == SEM_VALUE_MAX) {
|
|
||||||
atomic_store_64(&tick, 0);
|
|
||||||
id = 0;
|
|
||||||
}
|
}
|
||||||
char name[NAME_MAX - 4];
|
result = pthread_cond_init(&pnewsem->count_bump, NULL);
|
||||||
snprintf(name, sizeof(name), "/t%ld", id);
|
if (result)
|
||||||
p->sem = sem_open(name, O_CREAT | O_EXCL, pshared, value);
|
{
|
||||||
p->id = id;
|
pthread_mutex_destroy(&pnewsem->count_lock);
|
||||||
if (p->sem != SEM_FAILED) break;
|
free(pnewsem);
|
||||||
int e = errno;
|
return result;
|
||||||
if (e == EEXIST) continue;
|
|
||||||
if (e == EINTR) continue;
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==not created[%d]%s\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem,
|
|
||||||
e, strerror(e));
|
|
||||||
abort();
|
|
||||||
} while (p->sem == SEM_FAILED);
|
|
||||||
#elif defined(SEM_USE_SEM)
|
|
||||||
taosThreadOnce(&sem_once, once_init);
|
|
||||||
if (sem_inited != 1) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal resource init failed\n", taosDirEntryBaseName(__FILE__), __LINE__,
|
|
||||||
__func__, sem);
|
|
||||||
errno = ENOMEM;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
kern_return_t ret = semaphore_create(sem_port, &p->sem, SYNC_POLICY_FIFO, value);
|
|
||||||
if (ret != KERN_SUCCESS) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==semophore_create failed\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
// we fail-fast here, because we have less-doc about semaphore_create for the moment
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#else // SEM_USE_PTHREAD
|
|
||||||
p->sem = dispatch_semaphore_create(value);
|
|
||||||
if (p->sem == NULL) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==not created\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#endif // SEM_USE_PTHREAD
|
|
||||||
|
|
||||||
p->valid = 1;
|
|
||||||
|
|
||||||
*sem = p;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tsem_wait(tsem_t *sem) {
|
|
||||||
if (!*sem) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
struct tsem_s *p = *sem;
|
|
||||||
if (!p->valid) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==already destroyed\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#ifdef SEM_USE_PTHREAD
|
|
||||||
if (taosThreadMutexLock(&p->lock)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
p->val -= 1;
|
|
||||||
if (p->val < 0) {
|
|
||||||
if (taosThreadCondWait(&p->cond, &p->lock)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
}
|
||||||
}
|
pnewsem->count = count;
|
||||||
if (taosThreadMutexUnlock(&p->lock)) {
|
*psem = (tsem_t)pnewsem;
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
#elif defined(SEM_USE_POSIX)
|
|
||||||
return sem_wait(p->sem);
|
|
||||||
#elif defined(SEM_USE_SEM)
|
|
||||||
return semaphore_wait(p->sem);
|
|
||||||
#else // SEM_USE_PTHREAD
|
|
||||||
return dispatch_semaphore_wait(p->sem, DISPATCH_TIME_FOREVER);
|
|
||||||
#endif // SEM_USE_PTHREAD
|
|
||||||
}
|
|
||||||
|
|
||||||
int tsem_post(tsem_t *sem) {
|
|
||||||
if (!*sem) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
struct tsem_s *p = *sem;
|
|
||||||
if (!p->valid) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==already destroyed\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#ifdef SEM_USE_PTHREAD
|
|
||||||
if (taosThreadMutexLock(&p->lock)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
p->val += 1;
|
|
||||||
if (p->val <= 0) {
|
|
||||||
if (taosThreadCondSignal(&p->cond)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (taosThreadMutexUnlock(&p->lock)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
#elif defined(SEM_USE_POSIX)
|
|
||||||
return sem_post(p->sem);
|
|
||||||
#elif defined(SEM_USE_SEM)
|
|
||||||
return semaphore_signal(p->sem);
|
|
||||||
#else // SEM_USE_PTHREAD
|
|
||||||
return dispatch_semaphore_signal(p->sem);
|
|
||||||
#endif // SEM_USE_PTHREAD
|
|
||||||
}
|
|
||||||
|
|
||||||
int tsem_destroy(tsem_t *sem) {
|
|
||||||
// fprintf(stderr, "==%s[%d]%s():[%p]==destroying\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
|
||||||
if (!*sem) {
|
|
||||||
// fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem);
|
|
||||||
// abort();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
struct tsem_s *p = *sem;
|
|
||||||
if (!p->valid) {
|
int tsem_destroy(tsem_t *psem)
|
||||||
// fprintf(stderr, "==%s[%d]%s():[%p]==already destroyed\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
{
|
||||||
// sem); abort();
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifdef SEM_USE_PTHREAD
|
|
||||||
if (taosThreadMutexLock(&p->lock)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
p->valid = 0;
|
|
||||||
if (taosThreadCondDestroy(&p->cond)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
if (taosThreadMutexUnlock(&p->lock)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
if (taosThreadMutexDestroy(&p->lock)) {
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==internal logic error\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__,
|
|
||||||
sem);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#elif defined(SEM_USE_POSIX)
|
|
||||||
char name[NAME_MAX - 4];
|
|
||||||
snprintf(name, sizeof(name), "/t%ld", p->id);
|
|
||||||
int r = sem_unlink(name);
|
|
||||||
if (r) {
|
|
||||||
int e = errno;
|
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==unlink failed[%d]%s\n", taosDirEntryBaseName(__FILE__), __LINE__, __func__, sem,
|
|
||||||
e, strerror(e));
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#elif defined(SEM_USE_SEM)
|
|
||||||
semaphore_destroy(sem_port, p->sem);
|
|
||||||
#else // SEM_USE_PTHREAD
|
|
||||||
#endif // SEM_USE_PTHREAD
|
|
||||||
|
|
||||||
p->valid = 0;
|
int tsem_post(tsem_t *psem)
|
||||||
taosMemoryFree(p);
|
{
|
||||||
|
bosal_sem_t *pxsem;
|
||||||
|
int result, xresult;
|
||||||
|
|
||||||
*sem = NULL;
|
if (! psem)
|
||||||
return 0;
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool taosCheckPthreadValid(TdThread thread) {
|
bool taosCheckPthreadValid(TdThread thread) {
|
||||||
uint64_t id = 0;
|
int32_t ret = taosThreadKill(thread, 0);
|
||||||
int r = TdThreadhreadid_np(thread, &id);
|
if (ret == ESRCH) return false;
|
||||||
return r ? false : true;
|
if (ret == EINVAL) return false;
|
||||||
}
|
// alive
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int64_t taosGetSelfPthreadId() {
|
int64_t taosGetSelfPthreadId() {
|
||||||
uint64_t id;
|
TdThread thread = taosThreadSelf();
|
||||||
TdThreadhreadid_np(0, &id);
|
return (int64_t)thread;
|
||||||
return (int64_t)id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t taosGetPthreadId(TdThread thread) { return (int64_t)thread; }
|
int64_t taosGetPthreadId(TdThread thread) { return (int64_t)thread; }
|
||||||
|
|
|
@ -73,6 +73,10 @@ void taosIgnSignal(int32_t signum) { signal(signum, SIG_IGN); }
|
||||||
|
|
||||||
void taosDflSignal(int32_t signum) { signal(signum, SIG_DFL); }
|
void taosDflSignal(int32_t signum) { signal(signum, SIG_DFL); }
|
||||||
|
|
||||||
void taosKillChildOnParentStopped() { prctl(PR_SET_PDEATHSIG, SIGKILL); }
|
void taosKillChildOnParentStopped() {
|
||||||
|
#ifndef _TD_DARWIN_64
|
||||||
|
prctl(PR_SET_PDEATHSIG, SIGKILL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -49,6 +49,14 @@
|
||||||
#define INVALID_SOCKET -1
|
#define INVALID_SOCKET -1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct TdSocket {
|
||||||
|
#if SOCKET_WITH_LOCK
|
||||||
|
TdThreadRwlock rwlock;
|
||||||
|
#endif
|
||||||
|
int refId;
|
||||||
|
SocketFd fd;
|
||||||
|
} * TdSocketPtr, TdSocket;
|
||||||
|
|
||||||
typedef struct TdSocketServer {
|
typedef struct TdSocketServer {
|
||||||
#if SOCKET_WITH_LOCK
|
#if SOCKET_WITH_LOCK
|
||||||
TdThreadRwlock rwlock;
|
TdThreadRwlock rwlock;
|
||||||
|
@ -1029,60 +1037,6 @@ int32_t taosGetSocketName(TdSocketPtr pSocket, struct sockaddr *destAddr, int *a
|
||||||
return getsockname(pSocket->fd, destAddr, addrLen);
|
return getsockname(pSocket->fd, destAddr, addrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
TdEpollPtr taosCreateEpoll(int32_t size) {
|
|
||||||
EpollFd fd = -1;
|
|
||||||
#ifdef WINDOWS
|
|
||||||
assert(0);
|
|
||||||
#else
|
|
||||||
fd = epoll_create(size);
|
|
||||||
#endif
|
|
||||||
if (fd < 0) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
TdEpollPtr pEpoll = (TdEpollPtr)taosMemoryMalloc(sizeof(TdEpoll));
|
|
||||||
if (pEpoll == NULL) {
|
|
||||||
taosCloseSocketNoCheck1(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
pEpoll->fd = fd;
|
|
||||||
pEpoll->refId = 0;
|
|
||||||
return pEpoll;
|
|
||||||
}
|
|
||||||
int32_t taosCtlEpoll(TdEpollPtr pEpoll, int32_t epollOperate, TdSocketPtr pSocket, struct epoll_event *event) {
|
|
||||||
int32_t code = -1;
|
|
||||||
if (pEpoll == NULL || pEpoll->fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#ifdef WINDOWS
|
|
||||||
assert(0);
|
|
||||||
#else
|
|
||||||
code = epoll_ctl(pEpoll->fd, epollOperate, pSocket->fd, event);
|
|
||||||
#endif
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
int32_t taosWaitEpoll(TdEpollPtr pEpoll, struct epoll_event *event, int32_t maxEvents, int32_t timeout) {
|
|
||||||
int32_t code = -1;
|
|
||||||
if (pEpoll == NULL || pEpoll->fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#ifdef WINDOWS
|
|
||||||
assert(0);
|
|
||||||
#else
|
|
||||||
code = epoll_wait(pEpoll->fd, event, maxEvents, timeout);
|
|
||||||
#endif
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
int32_t taosCloseEpoll(TdEpollPtr *ppEpoll) {
|
|
||||||
int32_t code;
|
|
||||||
if (ppEpoll == NULL || *ppEpoll == NULL || (*ppEpoll)->fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
code = taosCloseSocketNoCheck1((*ppEpoll)->fd);
|
|
||||||
(*ppEpoll)->fd = -1;
|
|
||||||
taosMemoryFree(*ppEpoll);
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Set TCP connection timeout per-socket level.
|
* Set TCP connection timeout per-socket level.
|
||||||
* ref [https://github.com/libuv/help/issues/54]
|
* ref [https://github.com/libuv/help/issues/54]
|
||||||
|
@ -1100,6 +1054,11 @@ int32_t taosCreateSocketWithTimeout(uint32_t timeout) {
|
||||||
if (0 != setsockopt(fd, IPPROTO_TCP, TCP_MAXRT, (char *)&timeout, sizeof(timeout))) {
|
if (0 != setsockopt(fd, IPPROTO_TCP, TCP_MAXRT, (char *)&timeout, sizeof(timeout))) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
uint32_t conn_timeout_ms = timeout * 1000;
|
||||||
|
if (0 != setsockopt(fd, IPPROTO_TCP, TCP_CONNECTIONTIMEOUT, (char *)&conn_timeout_ms, sizeof(conn_timeout_ms))) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
#else // Linux like systems
|
#else // Linux like systems
|
||||||
uint32_t conn_timeout_ms = timeout * 1000;
|
uint32_t conn_timeout_ms = timeout * 1000;
|
||||||
if (0 != setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, (char *)&conn_timeout_ms, sizeof(conn_timeout_ms))) {
|
if (0 != setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, (char *)&conn_timeout_ms, sizeof(conn_timeout_ms))) {
|
||||||
|
|
|
@ -157,9 +157,9 @@ int32_t taosThreadKill(TdThread thread, int32_t sig) {
|
||||||
return pthread_kill(thread, sig);
|
return pthread_kill(thread, sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosThreadMutexConsistent(TdThreadMutex* mutex) {
|
// int32_t taosThreadMutexConsistent(TdThreadMutex* mutex) {
|
||||||
return pthread_mutex_consistent(mutex);
|
// return pthread_mutex_consistent(mutex);
|
||||||
}
|
// }
|
||||||
|
|
||||||
int32_t taosThreadMutexDestroy(TdThreadMutex * mutex) {
|
int32_t taosThreadMutexDestroy(TdThreadMutex * mutex) {
|
||||||
return pthread_mutex_destroy(mutex);
|
return pthread_mutex_destroy(mutex);
|
||||||
|
@ -173,9 +173,9 @@ int32_t taosThreadMutexLock(TdThreadMutex * mutex) {
|
||||||
return pthread_mutex_lock(mutex);
|
return pthread_mutex_lock(mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosThreadMutexTimedLock(TdThreadMutex * mutex, const struct timespec *abstime) {
|
// int32_t taosThreadMutexTimedLock(TdThreadMutex * mutex, const struct timespec *abstime) {
|
||||||
return pthread_mutex_timedlock(mutex, abstime);
|
// return pthread_mutex_timedlock(mutex, abstime);
|
||||||
}
|
// }
|
||||||
|
|
||||||
int32_t taosThreadMutexTryLock(TdThreadMutex * mutex) {
|
int32_t taosThreadMutexTryLock(TdThreadMutex * mutex) {
|
||||||
return pthread_mutex_trylock(mutex);
|
return pthread_mutex_trylock(mutex);
|
||||||
|
@ -193,9 +193,9 @@ int32_t taosThreadMutexAttrGetPshared(const TdThreadMutexAttr * attr, int32_t *p
|
||||||
return pthread_mutexattr_getpshared(attr, pshared);
|
return pthread_mutexattr_getpshared(attr, pshared);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosThreadMutexAttrGetRobust(const TdThreadMutexAttr * attr, int32_t * robust) {
|
// int32_t taosThreadMutexAttrGetRobust(const TdThreadMutexAttr * attr, int32_t * robust) {
|
||||||
return pthread_mutexattr_getrobust(attr, robust);
|
// return pthread_mutexattr_getrobust(attr, robust);
|
||||||
}
|
// }
|
||||||
|
|
||||||
int32_t taosThreadMutexAttrGetType(const TdThreadMutexAttr * attr, int32_t *kind) {
|
int32_t taosThreadMutexAttrGetType(const TdThreadMutexAttr * attr, int32_t *kind) {
|
||||||
return pthread_mutexattr_gettype(attr, kind);
|
return pthread_mutexattr_gettype(attr, kind);
|
||||||
|
@ -209,9 +209,9 @@ int32_t taosThreadMutexAttrSetPshared(TdThreadMutexAttr * attr, int32_t pshared)
|
||||||
return pthread_mutexattr_setpshared(attr, pshared);
|
return pthread_mutexattr_setpshared(attr, pshared);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosThreadMutexAttrSetRobust(TdThreadMutexAttr * attr, int32_t robust) {
|
// int32_t taosThreadMutexAttrSetRobust(TdThreadMutexAttr * attr, int32_t robust) {
|
||||||
return pthread_mutexattr_setrobust(attr, robust);
|
// return pthread_mutexattr_setrobust(attr, robust);
|
||||||
}
|
// }
|
||||||
|
|
||||||
int32_t taosThreadMutexAttrSetType(TdThreadMutexAttr * attr, int32_t kind) {
|
int32_t taosThreadMutexAttrSetType(TdThreadMutexAttr * attr, int32_t kind) {
|
||||||
return pthread_mutexattr_settype(attr, kind);
|
return pthread_mutexattr_settype(attr, kind);
|
||||||
|
@ -233,13 +233,13 @@ int32_t taosThreadRwlockRdlock(TdThreadRwlock * rwlock) {
|
||||||
return pthread_rwlock_rdlock(rwlock);
|
return pthread_rwlock_rdlock(rwlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosThreadRwlockTimedRdlock(TdThreadRwlock * rwlock, const struct timespec *abstime) {
|
// int32_t taosThreadRwlockTimedRdlock(TdThreadRwlock * rwlock, const struct timespec *abstime) {
|
||||||
return pthread_rwlock_timedrdlock(rwlock, abstime);
|
// return pthread_rwlock_timedrdlock(rwlock, abstime);
|
||||||
}
|
// }
|
||||||
|
|
||||||
int32_t taosThreadRwlockTimedWrlock(TdThreadRwlock * rwlock, const struct timespec *abstime) {
|
// int32_t taosThreadRwlockTimedWrlock(TdThreadRwlock * rwlock, const struct timespec *abstime) {
|
||||||
return pthread_rwlock_timedwrlock(rwlock, abstime);
|
// return pthread_rwlock_timedwrlock(rwlock, abstime);
|
||||||
}
|
// }
|
||||||
|
|
||||||
int32_t taosThreadRwlockTryRdlock(TdThreadRwlock * rwlock) {
|
int32_t taosThreadRwlockTryRdlock(TdThreadRwlock * rwlock) {
|
||||||
return pthread_rwlock_tryrdlock(rwlock);
|
return pthread_rwlock_tryrdlock(rwlock);
|
||||||
|
@ -303,7 +303,7 @@ int32_t taosThreadSpinDestroy(TdThreadSpinlock * lock) {
|
||||||
|
|
||||||
int32_t taosThreadSpinInit(TdThreadSpinlock * lock, int32_t pshared) {
|
int32_t taosThreadSpinInit(TdThreadSpinlock * lock, int32_t pshared) {
|
||||||
#ifdef TD_USE_SPINLOCK_AS_MUTEX
|
#ifdef TD_USE_SPINLOCK_AS_MUTEX
|
||||||
assert(pshared == NULL);
|
assert(pshared == 0);
|
||||||
return pthread_mutex_init((pthread_mutex_t*)lock, NULL);
|
return pthread_mutex_init((pthread_mutex_t*)lock, NULL);
|
||||||
#else
|
#else
|
||||||
return pthread_spin_init((pthread_spinlock_t*)lock, pshared);
|
return pthread_spin_init((pthread_spinlock_t*)lock, pshared);
|
||||||
|
|
|
@ -417,8 +417,8 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v
|
||||||
|
|
||||||
if (pNode == NULL) {
|
if (pNode == NULL) {
|
||||||
pushfrontNodeInEntryList(pe, pNode1);
|
pushfrontNodeInEntryList(pe, pNode1);
|
||||||
atomic_add_fetch_64(&pCacheObj->numOfElems, 1);
|
atomic_add_fetch_ptr(&pCacheObj->numOfElems, 1);
|
||||||
atomic_add_fetch_64(&pCacheObj->sizeInBytes, pNode1->size);
|
atomic_add_fetch_ptr(&pCacheObj->sizeInBytes, pNode1->size);
|
||||||
uDebug("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64
|
uDebug("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64
|
||||||
", totalNum:%d sizeInBytes:%" PRId64 "bytes size:%" PRId64 "bytes",
|
", totalNum:%d sizeInBytes:%" PRId64 "bytes size:%" PRId64 "bytes",
|
||||||
pCacheObj->name, key, pNode1->data, pNode1->addedTime, pNode1->expireTime, (int32_t)pCacheObj->numOfElems,
|
pCacheObj->name, key, pNode1->data, pNode1->addedTime, pNode1->expireTime, (int32_t)pCacheObj->numOfElems,
|
||||||
|
@ -667,7 +667,7 @@ void doTraverseElems(SCacheObj *pCacheObj, bool (*fp)(void *param, SCacheNode *p
|
||||||
pEntry->next = next;
|
pEntry->next = next;
|
||||||
pEntry->num -= 1;
|
pEntry->num -= 1;
|
||||||
|
|
||||||
atomic_sub_fetch_64(&pCacheObj->numOfElems, 1);
|
atomic_sub_fetch_ptr(&pCacheObj->numOfElems, 1);
|
||||||
pNode = next;
|
pNode = next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,7 +132,7 @@ static timer_map_t timerMap;
|
||||||
static uintptr_t getNextTimerId() {
|
static uintptr_t getNextTimerId() {
|
||||||
uintptr_t id;
|
uintptr_t id;
|
||||||
do {
|
do {
|
||||||
id = (uintptr_t)atomic_add_fetch_ptr((void **)&nextTimerId, (void*)1);
|
id = (uintptr_t)atomic_add_fetch_ptr((void **)&nextTimerId, 1);
|
||||||
} while (id == 0);
|
} while (id == 0);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,10 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef _TD_DARWIN_64
|
||||||
|
#include <pwd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "shellInt.h"
|
#include "shellInt.h"
|
||||||
|
|
||||||
#define SHELL_HOST "The auth string to use when connecting to the server."
|
#define SHELL_HOST "The auth string to use when connecting to the server."
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define ALLOW_FORBID_FUNC
|
||||||
#define _BSD_SOURCE
|
#define _BSD_SOURCE
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#define _XOPEN_SOURCE
|
#define _XOPEN_SOURCE
|
||||||
|
|
Loading…
Reference in New Issue