fix: timewait
This commit is contained in:
parent
e226898e17
commit
dca6b21e88
|
@ -114,7 +114,7 @@ int32_t tsem_destroy(tsem_t* sem) {
|
||||||
|
|
||||||
int32_t tsem_init(tsem_t *psem, int flags, unsigned int count) {
|
int32_t tsem_init(tsem_t *psem, int flags, unsigned int count) {
|
||||||
*psem = dispatch_semaphore_create(count);
|
*psem = dispatch_semaphore_create(count);
|
||||||
if (*psem == NULL) return TAO_SYTAOS_SYSTEM_ERROR(errno);
|
if (*psem == NULL) return TAOS_SYSTEM_ERROR(errno);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,16 +250,15 @@ int32_t tsem_timewait(tsem_t* sem, int64_t ms) {
|
||||||
ts.tv_sec += ts.tv_nsec / 1000000000;
|
ts.tv_sec += ts.tv_nsec / 1000000000;
|
||||||
ts.tv_nsec %= 1000000000;
|
ts.tv_nsec %= 1000000000;
|
||||||
|
|
||||||
while ((ret = sem_timedwait(sem, &ts)) == -1 && errno == EINTR) {
|
while ((ret = sem_timedwait(sem, &ts)) == -1) {
|
||||||
continue;
|
if(errno == EINTR) {
|
||||||
}
|
continue;
|
||||||
if(ETIMEDOUT == errno) {
|
} else if(errno == ETIMEDOUT) {
|
||||||
return TSDB_CODE_TIMEOUT_ERROR;
|
return TSDB_CODE_TIMEOUT_ERROR;
|
||||||
}
|
} else {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
if (-1 == ret) {
|
return terrno;
|
||||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
}
|
||||||
return terrno;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -59,18 +59,26 @@ TEST(osSemaphoreTests, Destroy) {
|
||||||
TEST(osSemaphoreTests, WaitTime0) {
|
TEST(osSemaphoreTests, WaitTime0) {
|
||||||
tsem_t sem;
|
tsem_t sem;
|
||||||
(void)tsem_init(&sem, 0, 0);
|
(void)tsem_init(&sem, 0, 0);
|
||||||
EXPECT_NE(tsem_timewait(&sem, 1000), 0);
|
EXPECT_EQ(tsem_timewait(&sem, 1000), TSDB_CODE_TIMEOUT_ERROR);
|
||||||
(void)tsem_destroy(&sem);
|
(void)tsem_destroy(&sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(osSemaphoreTests, WaitTime1) {
|
TEST(osSemaphoreTests, WaitTime1) {
|
||||||
tsem_t sem;
|
tsem_t sem;
|
||||||
(void)tsem_init(&sem, 0, 1);
|
(void)tsem_init(&sem, 0, 1);
|
||||||
EXPECT_EQ(tsem_timewait(&sem, 1000), 0);
|
EXPECT_EQ(tsem_timewait(&sem, 10000), 0);
|
||||||
EXPECT_NE(tsem_timewait(&sem, 1000), 0);
|
EXPECT_EQ(tsem_timewait(&sem, 1000), TSDB_CODE_TIMEOUT_ERROR);
|
||||||
(void)tsem_destroy(&sem);
|
(void)tsem_destroy(&sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(osSemaphoreTests, WaitTime2) {
|
||||||
|
tsem2_t sem;
|
||||||
|
(void)tsem2_init(&sem, 0, 1);
|
||||||
|
EXPECT_EQ(tsem2_timewait(&sem, 10000), 0);
|
||||||
|
EXPECT_EQ(tsem2_timewait(&sem, 1000), TSDB_CODE_TIMEOUT_ERROR);
|
||||||
|
(void)tsem2_destroy(&sem);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(osSemaphoreTests, WaitAndPost) {
|
TEST(osSemaphoreTests, WaitAndPost) {
|
||||||
tsem_t sem;
|
tsem_t sem;
|
||||||
int result = tsem_init(&sem, 0, 0);
|
int result = tsem_init(&sem, 0, 0);
|
||||||
|
@ -217,7 +225,7 @@ TEST(osSemaphoreTests, Performance4_1) {
|
||||||
(void)tsem_post(&sem);
|
(void)tsem_post(&sem);
|
||||||
}).detach();
|
}).detach();
|
||||||
|
|
||||||
(void)tsem_timewait(&sem, 1000);
|
EXPECT_EQ(tsem_timewait(&sem, 1000),0);
|
||||||
|
|
||||||
(void)tsem_destroy(&sem);
|
(void)tsem_destroy(&sem);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue