mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-22 12:34:27 +00:00
Provide a helper function that can reset cgsems to zero.
This commit is contained in:
parent
155945094f
commit
9628207066
28
util.c
28
util.c
@ -2599,6 +2599,25 @@ int _cgsem_mswait(cgsem_t *cgsem, int ms, const char *file, const char *func, co
|
|||||||
/* We don't reach here */
|
/* We don't reach here */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reset semaphore count back to zero */
|
||||||
|
void cgsem_reset(cgsem_t *cgsem)
|
||||||
|
{
|
||||||
|
int ret, fd;
|
||||||
|
fd_set rd;
|
||||||
|
char buf;
|
||||||
|
|
||||||
|
fd = cgsem->pipefd[0];
|
||||||
|
FD_ZERO(&rd);
|
||||||
|
FD_SET(fd, &rd);
|
||||||
|
do {
|
||||||
|
struct timeval timeout = {0, 0};
|
||||||
|
|
||||||
|
ret = select(fd + 1, &rd, NULL, NULL, &timeout);
|
||||||
|
if (ret > 0)
|
||||||
|
ret = read(fd, &buf, 1);
|
||||||
|
} while (ret > 0);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
void _cgsem_init(cgsem_t *cgsem, const char *file, const char *func, const int line)
|
void _cgsem_init(cgsem_t *cgsem, const char *file, const char *func, const int line)
|
||||||
{
|
{
|
||||||
@ -2639,6 +2658,15 @@ int _cgsem_mswait(cgsem_t *cgsem, int ms, const char *file, const char *func, co
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cgsem_reset(cgsem_t *cgsem)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
do {
|
||||||
|
ret = sem_trywait(cgsem);
|
||||||
|
} while (!ret);
|
||||||
|
}
|
||||||
|
|
||||||
void cgsem_destroy(cgsem_t *cgsem)
|
void cgsem_destroy(cgsem_t *cgsem)
|
||||||
{
|
{
|
||||||
sem_destroy(cgsem);
|
sem_destroy(cgsem);
|
||||||
|
1
util.h
1
util.h
@ -138,6 +138,7 @@ void _cgsem_init(cgsem_t *cgsem, const char *file, const char *func, const int l
|
|||||||
void _cgsem_post(cgsem_t *cgsem, const char *file, const char *func, const int line);
|
void _cgsem_post(cgsem_t *cgsem, const char *file, const char *func, const int line);
|
||||||
void _cgsem_wait(cgsem_t *cgsem, const char *file, const char *func, const int line);
|
void _cgsem_wait(cgsem_t *cgsem, const char *file, const char *func, const int line);
|
||||||
int _cgsem_mswait(cgsem_t *cgsem, int ms, const char *file, const char *func, const int line);
|
int _cgsem_mswait(cgsem_t *cgsem, int ms, const char *file, const char *func, const int line);
|
||||||
|
void cgsem_reset(cgsem_t *cgsem);
|
||||||
void cgsem_destroy(cgsem_t *cgsem);
|
void cgsem_destroy(cgsem_t *cgsem);
|
||||||
bool cg_completion_timeout(void *fn, void *fnarg, int timeout);
|
bool cg_completion_timeout(void *fn, void *fnarg, int timeout);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user