|
|
|
@ -2410,7 +2410,7 @@ void _cgsem_wait(cgsem_t *cgsem, const char *file, const char *func, const int l
@@ -2410,7 +2410,7 @@ void _cgsem_wait(cgsem_t *cgsem, const char *file, const char *func, const int l
|
|
|
|
|
applog(LOG_WARNING, "Failed to read errno=%d" IN_FMT_FFL, errno, file, func, line); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _cgsem_destroy(cgsem_t *cgsem) |
|
|
|
|
void cgsem_destroy(cgsem_t *cgsem) |
|
|
|
|
{ |
|
|
|
|
close(cgsem->pipefd[1]); |
|
|
|
|
close(cgsem->pipefd[0]); |
|
|
|
@ -2480,7 +2480,7 @@ int _cgsem_mswait(cgsem_t *cgsem, int ms, const char *file, const char *func, co
@@ -2480,7 +2480,7 @@ int _cgsem_mswait(cgsem_t *cgsem, int ms, const char *file, const char *func, co
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _cgsem_destroy(cgsem_t *cgsem) |
|
|
|
|
void cgsem_destroy(cgsem_t *cgsem) |
|
|
|
|
{ |
|
|
|
|
sem_destroy(cgsem); |
|
|
|
|
} |
|
|
|
@ -2499,7 +2499,7 @@ void *completion_thread(void *arg)
@@ -2499,7 +2499,7 @@ void *completion_thread(void *arg)
|
|
|
|
|
{ |
|
|
|
|
struct cg_completion *cgc = (struct cg_completion *)arg; |
|
|
|
|
|
|
|
|
|
pthread_detach(pthread_self()); |
|
|
|
|
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); |
|
|
|
|
cgc->fn(cgc->fnarg); |
|
|
|
|
cgsem_post(&cgc->cgsem); |
|
|
|
|
|
|
|
|
@ -2522,7 +2522,10 @@ bool cg_completion_timeout(void *fn, void *fnarg, int timeout)
@@ -2522,7 +2522,10 @@ bool cg_completion_timeout(void *fn, void *fnarg, int timeout)
|
|
|
|
|
pthread_create(&pthread, NULL, completion_thread, (void *)cgc); |
|
|
|
|
|
|
|
|
|
ret = cgsem_mswait(&cgc->cgsem, timeout); |
|
|
|
|
if (!ret) |
|
|
|
|
if (!ret) { |
|
|
|
|
pthread_join(pthread, NULL); |
|
|
|
|
free(cgc); |
|
|
|
|
} else |
|
|
|
|
pthread_cancel(pthread); |
|
|
|
|
return !ret; |
|
|
|
|
} |
|
|
|
|