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) {
|
||||
*psem = dispatch_semaphore_create(count);
|
||||
if (*psem == NULL) return TAO_SYTAOS_SYSTEM_ERROR(errno);
|
||||
if (*psem == NULL) return TAOS_SYSTEM_ERROR(errno);
|
||||
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_nsec %= 1000000000;
|
||||
|
||||
while ((ret = sem_timedwait(sem, &ts)) == -1 && errno == EINTR) {
|
||||
continue;
|
||||
}
|
||||
if(ETIMEDOUT == errno) {
|
||||
return TSDB_CODE_TIMEOUT_ERROR;
|
||||
}
|
||||
|
||||
if (-1 == ret) {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
return terrno;
|
||||
while ((ret = sem_timedwait(sem, &ts)) == -1) {
|
||||
if(errno == EINTR) {
|
||||
continue;
|
||||
} else if(errno == ETIMEDOUT) {
|
||||
return TSDB_CODE_TIMEOUT_ERROR;
|
||||
} else {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
return terrno;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -59,18 +59,26 @@ TEST(osSemaphoreTests, Destroy) {
|
|||
TEST(osSemaphoreTests, WaitTime0) {
|
||||
tsem_t sem;
|
||||
(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);
|
||||
}
|
||||
|
||||
TEST(osSemaphoreTests, WaitTime1) {
|
||||
tsem_t sem;
|
||||
(void)tsem_init(&sem, 0, 1);
|
||||
EXPECT_EQ(tsem_timewait(&sem, 1000), 0);
|
||||
EXPECT_NE(tsem_timewait(&sem, 1000), 0);
|
||||
EXPECT_EQ(tsem_timewait(&sem, 10000), 0);
|
||||
EXPECT_EQ(tsem_timewait(&sem, 1000), TSDB_CODE_TIMEOUT_ERROR);
|
||||
(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) {
|
||||
tsem_t sem;
|
||||
int result = tsem_init(&sem, 0, 0);
|
||||
|
@ -217,7 +225,7 @@ TEST(osSemaphoreTests, Performance4_1) {
|
|||
(void)tsem_post(&sem);
|
||||
}).detach();
|
||||
|
||||
(void)tsem_timewait(&sem, 1000);
|
||||
EXPECT_EQ(tsem_timewait(&sem, 1000),0);
|
||||
|
||||
(void)tsem_destroy(&sem);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue