TD-4088
This commit is contained in:
parent
ac3d6440c8
commit
a4f75510d7
|
@ -74,17 +74,9 @@ extern "C" {
|
||||||
|
|
||||||
#define TAOS_OS_FUNC_FILE_SENDIFLE
|
#define TAOS_OS_FUNC_FILE_SENDIFLE
|
||||||
|
|
||||||
#define TAOS_OS_FUNC_SEMPHONE
|
|
||||||
typedef struct tsem_s *tsem_t;
|
|
||||||
int tsem_init(tsem_t *sem, int pshared, unsigned int value);
|
|
||||||
int tsem_wait(tsem_t *sem);
|
|
||||||
int tsem_post(tsem_t *sem);
|
|
||||||
int tsem_destroy(tsem_t *sem);
|
|
||||||
|
|
||||||
#define TAOS_OS_FUNC_SOCKET_SETSOCKETOPT
|
#define TAOS_OS_FUNC_SOCKET_SETSOCKETOPT
|
||||||
#define TAOS_OS_FUNC_SYSINFO
|
#define TAOS_OS_FUNC_SYSINFO
|
||||||
#define TAOS_OS_FUNC_TIMER
|
#define TAOS_OS_FUNC_TIMERD
|
||||||
#define TAOS_OS_FUNC_SEMPHONE_PTHREAD
|
|
||||||
|
|
||||||
// specific
|
// specific
|
||||||
typedef int(*__compar_fn_t)(const void *, const void *);
|
typedef int(*__compar_fn_t)(const void *, const void *);
|
||||||
|
@ -104,8 +96,6 @@ typedef int(*__compar_fn_t)(const void *, const void *);
|
||||||
#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
|
#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TAOS_OS_FUNC_PTHREAD_RWLOCK
|
|
||||||
|
|
||||||
#include "eok.h"
|
#include "eok.h"
|
||||||
|
|
||||||
void taos_block_sigalrm(void);
|
void taos_block_sigalrm(void);
|
||||||
|
|
|
@ -20,15 +20,21 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef TAOS_OS_FUNC_SEMPHONE
|
#if defined (_TD_DARWIN_64)
|
||||||
|
typedef struct tsem_s *tsem_t;
|
||||||
|
int tsem_init(tsem_t *sem, int pshared, unsigned int value);
|
||||||
|
int tsem_wait(tsem_t *sem);
|
||||||
|
int tsem_post(tsem_t *sem);
|
||||||
|
int tsem_destroy(tsem_t *sem);
|
||||||
|
#else
|
||||||
#define tsem_t sem_t
|
#define tsem_t sem_t
|
||||||
#define tsem_init sem_init
|
#define tsem_init sem_init
|
||||||
int tsem_wait(tsem_t* sem);
|
int32_t tsem_wait(tsem_t* sem);
|
||||||
#define tsem_post sem_post
|
#define tsem_post sem_post
|
||||||
#define tsem_destroy sem_destroy
|
#define tsem_destroy sem_destroy
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TAOS_OS_FUNC_PTHREAD_RWLOCK
|
#if defined (_TD_DARWIN_64)
|
||||||
#define pthread_rwlock_t pthread_mutex_t
|
#define pthread_rwlock_t pthread_mutex_t
|
||||||
#define pthread_rwlock_init(lock, NULL) pthread_mutex_init(lock, NULL)
|
#define pthread_rwlock_init(lock, NULL) pthread_mutex_init(lock, NULL)
|
||||||
#define pthread_rwlock_destroy(lock) pthread_mutex_destroy(lock)
|
#define pthread_rwlock_destroy(lock) pthread_mutex_destroy(lock)
|
||||||
|
@ -43,7 +49,6 @@ extern "C" {
|
||||||
#define pthread_spin_unlock(lock) pthread_mutex_unlock(lock)
|
#define pthread_spin_unlock(lock) pthread_mutex_unlock(lock)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TAOS_OS_FUNC_SEMPHONE_PTHREAD
|
|
||||||
bool taosCheckPthreadValid(pthread_t thread);
|
bool taosCheckPthreadValid(pthread_t thread);
|
||||||
int64_t taosGetSelfPthreadId();
|
int64_t taosGetSelfPthreadId();
|
||||||
int64_t taosGetPthreadId(pthread_t thread);
|
int64_t taosGetPthreadId(pthread_t thread);
|
||||||
|
|
|
@ -28,7 +28,7 @@ extern "C" {
|
||||||
#else
|
#else
|
||||||
#define tstrdup(str) strdup(str)
|
#define tstrdup(str) strdup(str)
|
||||||
#define tstrndup(str, size) strndup(str, size)
|
#define tstrndup(str, size) strndup(str, size)
|
||||||
#define tgetline(lineptr, n, stream) getline(lineptr, n , stream)
|
#define tgetline(lineptr, n, stream) getline(lineptr, n, stream)
|
||||||
#define twcslen wcslen
|
#define twcslen wcslen
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,6 @@ extern "C" {
|
||||||
#define TAOS_OS_FUNC_FILE_FTRUNCATE
|
#define TAOS_OS_FUNC_FILE_FTRUNCATE
|
||||||
|
|
||||||
|
|
||||||
#define TAOS_OS_FUNC_SEMPHONE_PTHREAD
|
|
||||||
|
|
||||||
#define TAOS_OS_FUNC_SOCKET
|
#define TAOS_OS_FUNC_SOCKET
|
||||||
#define TAOS_OS_FUNC_SOCKET_SETSOCKETOPT
|
#define TAOS_OS_FUNC_SOCKET_SETSOCKETOPT
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
static pthread_t sem_thread;
|
static pthread_t sem_thread;
|
||||||
static pthread_once_t sem_once;
|
static pthread_once_t sem_once;
|
||||||
static task_t sem_port;
|
static task_t sem_port;
|
||||||
static volatile int sem_inited = 0;
|
static volatile int32_t 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) {
|
||||||
|
@ -55,7 +55,7 @@ static void* sem_thread_routine(void *arg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void once_init(void) {
|
static void once_init(void) {
|
||||||
int r = 0;
|
int32_t r = 0;
|
||||||
r = pthread_create(&sem_thread, NULL, sem_thread_routine, NULL);
|
r = pthread_create(&sem_thread, NULL, sem_thread_routine, NULL);
|
||||||
if (r) {
|
if (r) {
|
||||||
fprintf(stderr, "==%s[%d]%s()==failed to create thread\n", basename(__FILE__), __LINE__, __func__);
|
fprintf(stderr, "==%s[%d]%s()==failed to create thread\n", basename(__FILE__), __LINE__, __func__);
|
||||||
|
@ -81,10 +81,10 @@ struct tsem_s {
|
||||||
dispatch_semaphore_t sem;
|
dispatch_semaphore_t sem;
|
||||||
#endif // SEM_USE_PTHREAD
|
#endif // SEM_USE_PTHREAD
|
||||||
|
|
||||||
volatile unsigned int valid:1;
|
volatile unsigned int32_t valid:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
|
int32_t tsem_init(tsem_t *sem, int32_t pshared, unsigned int32_t value) {
|
||||||
// fprintf(stderr, "==%s[%d]%s():[%p]==creating\n", basename(__FILE__), __LINE__, __func__, sem);
|
// fprintf(stderr, "==%s[%d]%s():[%p]==creating\n", basename(__FILE__), __LINE__, __func__, sem);
|
||||||
if (*sem) {
|
if (*sem) {
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==already initialized\n", basename(__FILE__), __LINE__, __func__, sem);
|
fprintf(stderr, "==%s[%d]%s():[%p]==already initialized\n", basename(__FILE__), __LINE__, __func__, sem);
|
||||||
|
@ -97,7 +97,7 @@ int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SEM_USE_PTHREAD
|
#ifdef SEM_USE_PTHREAD
|
||||||
int r = pthread_mutex_init(&p->lock, NULL);
|
int32_t r = pthread_mutex_init(&p->lock, NULL);
|
||||||
do {
|
do {
|
||||||
if (r) break;
|
if (r) break;
|
||||||
r = pthread_cond_init(&p->cond, NULL);
|
r = pthread_cond_init(&p->cond, NULL);
|
||||||
|
@ -124,7 +124,7 @@ int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
|
||||||
p->sem = sem_open(name, O_CREAT|O_EXCL, pshared, value);
|
p->sem = sem_open(name, O_CREAT|O_EXCL, pshared, value);
|
||||||
p->id = id;
|
p->id = id;
|
||||||
if (p->sem!=SEM_FAILED) break;
|
if (p->sem!=SEM_FAILED) break;
|
||||||
int e = errno;
|
int32_t e = errno;
|
||||||
if (e==EEXIST) continue;
|
if (e==EEXIST) continue;
|
||||||
if (e==EINTR) continue;
|
if (e==EINTR) continue;
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==not created[%d]%s\n", basename(__FILE__), __LINE__, __func__, sem, e, strerror(e));
|
fprintf(stderr, "==%s[%d]%s():[%p]==not created[%d]%s\n", basename(__FILE__), __LINE__, __func__, sem, e, strerror(e));
|
||||||
|
@ -158,7 +158,7 @@ int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tsem_wait(tsem_t *sem) {
|
int32_t tsem_wait(tsem_t *sem) {
|
||||||
if (!*sem) {
|
if (!*sem) {
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", basename(__FILE__), __LINE__, __func__, sem);
|
fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", basename(__FILE__), __LINE__, __func__, sem);
|
||||||
abort();
|
abort();
|
||||||
|
@ -194,7 +194,7 @@ int tsem_wait(tsem_t *sem) {
|
||||||
#endif // SEM_USE_PTHREAD
|
#endif // SEM_USE_PTHREAD
|
||||||
}
|
}
|
||||||
|
|
||||||
int tsem_post(tsem_t *sem) {
|
int32_t tsem_post(tsem_t *sem) {
|
||||||
if (!*sem) {
|
if (!*sem) {
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", basename(__FILE__), __LINE__, __func__, sem);
|
fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", basename(__FILE__), __LINE__, __func__, sem);
|
||||||
abort();
|
abort();
|
||||||
|
@ -230,7 +230,7 @@ int tsem_post(tsem_t *sem) {
|
||||||
#endif // SEM_USE_PTHREAD
|
#endif // SEM_USE_PTHREAD
|
||||||
}
|
}
|
||||||
|
|
||||||
int tsem_destroy(tsem_t *sem) {
|
int32_t tsem_destroy(tsem_t *sem) {
|
||||||
// fprintf(stderr, "==%s[%d]%s():[%p]==destroying\n", basename(__FILE__), __LINE__, __func__, sem);
|
// fprintf(stderr, "==%s[%d]%s():[%p]==destroying\n", basename(__FILE__), __LINE__, __func__, sem);
|
||||||
if (!*sem) {
|
if (!*sem) {
|
||||||
// fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", basename(__FILE__), __LINE__, __func__, sem);
|
// fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n", basename(__FILE__), __LINE__, __func__, sem);
|
||||||
|
@ -264,9 +264,9 @@ int tsem_destroy(tsem_t *sem) {
|
||||||
#elif defined(SEM_USE_POSIX)
|
#elif defined(SEM_USE_POSIX)
|
||||||
char name[NAME_MAX-4];
|
char name[NAME_MAX-4];
|
||||||
snprintf(name, sizeof(name), "/t%ld", p->id);
|
snprintf(name, sizeof(name), "/t%ld", p->id);
|
||||||
int r = sem_unlink(name);
|
int32_t r = sem_unlink(name);
|
||||||
if (r) {
|
if (r) {
|
||||||
int e = errno;
|
int32_t e = errno;
|
||||||
fprintf(stderr, "==%s[%d]%s():[%p]==unlink failed[%d]%s\n", basename(__FILE__), __LINE__, __func__, sem, e, strerror(e));
|
fprintf(stderr, "==%s[%d]%s():[%p]==unlink failed[%d]%s\n", basename(__FILE__), __LINE__, __func__, sem, e, strerror(e));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
@ -284,7 +284,7 @@ int tsem_destroy(tsem_t *sem) {
|
||||||
|
|
||||||
bool taosCheckPthreadValid(pthread_t thread) {
|
bool taosCheckPthreadValid(pthread_t thread) {
|
||||||
uint64_t id = 0;
|
uint64_t id = 0;
|
||||||
int r = pthread_threadid_np(thread, &id);
|
int32_t r = pthread_threadid_np(thread, &id);
|
||||||
return r ? false : true;
|
return r ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
|
||||||
#ifndef TAOS_OS_FUNC_SEMPHONE
|
#if !defined (_TD_DARWIN_64)
|
||||||
|
|
||||||
int tsem_wait(tsem_t* sem) {
|
int32_t tsem_wait(tsem_t* sem) {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
do {
|
do {
|
||||||
ret = sem_wait(sem);
|
ret = sem_wait(sem);
|
||||||
|
@ -28,9 +28,9 @@ int tsem_wait(tsem_t* sem) {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef TAOS_OS_FUNC_SEMPHONE_PTHREAD
|
#if !(defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) || defined (_TD_DARWIN_64))
|
||||||
|
|
||||||
bool taosCheckPthreadValid(pthread_t thread) { return thread != 0; }
|
bool taosCheckPthreadValid(pthread_t thread) { return thread != 0; }
|
||||||
|
|
||||||
int64_t taosGetSelfPthreadId() {
|
int64_t taosGetSelfPthreadId() {
|
||||||
static __thread int id = 0;
|
static __thread int id = 0;
|
||||||
|
|
|
@ -22,6 +22,7 @@ General Public License for more details. */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#if STDC_HEADERS
|
#if STDC_HEADERS
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
Loading…
Reference in New Issue