version 1.1.2.10, 2013/12/05 23:43:46
|
version 1.1.2.13, 2013/12/06 01:31:30
|
Line 45 io_progInit(const char *progName, u_int initNum, u_int
|
Line 45 io_progInit(const char *progName, u_int initNum, u_int
|
} |
} |
|
|
pthread_mutex_init(&prg->prog_mtx, NULL); |
pthread_mutex_init(&prg->prog_mtx, NULL); |
|
signal(SIGPIPE, SIG_IGN); |
|
|
if (io_progOpen(prg, prg->prog_inin) < 0) { |
if (io_progOpen(prg, prg->prog_inin) < 0) { |
io_progDestroy(&prg); |
io_progDestroy(&prg); |
Line 70 io_progDestroy(prog_t ** __restrict pprg)
|
Line 71 io_progDestroy(prog_t ** __restrict pprg)
|
e_free((*pprg)->prog_used); |
e_free((*pprg)->prog_used); |
array_Destroy(&(*pprg)->prog_fds); |
array_Destroy(&(*pprg)->prog_fds); |
pthread_mutex_destroy(&(*pprg)->prog_mtx); |
pthread_mutex_destroy(&(*pprg)->prog_mtx); |
|
signal(SIGPIPE, SIG_DFL); |
|
|
e_free(*pprg); |
e_free(*pprg); |
*pprg = NULL; |
*pprg = NULL; |
Line 99 io_progClose(prog_t * __restrict prg, u_int closeNum)
|
Line 101 io_progClose(prog_t * __restrict prg, u_int closeNum)
|
for (i = array_Size(prg->prog_fds) - 1; |
for (i = array_Size(prg->prog_fds) - 1; |
(closeNum ? ret < closeNum : 42) && i > -1; i--) |
(closeNum ? ret < closeNum : 42) && i > -1; i--) |
if (array_Get(prg->prog_fds, i)) { |
if (array_Get(prg->prog_fds, i)) { |
|
#ifdef POPEN_STREAM |
e_pclose(array(prg->prog_fds, i, FILE*)); |
e_pclose(array(prg->prog_fds, i, FILE*)); |
|
#else |
|
e_pclose((int) array(prg->prog_fds, i, intptr_t)); |
|
#endif |
array_Del(prg->prog_fds, i, 0); |
array_Del(prg->prog_fds, i, 0); |
clrbit(prg->prog_used, i); |
clrbit(prg->prog_used, i); |
prg->prog_cnum--; |
prg->prog_cnum--; |
Line 120 io_progClose(prog_t * __restrict prg, u_int closeNum)
|
Line 126 io_progClose(prog_t * __restrict prg, u_int closeNum)
|
int |
int |
io_progOpen(prog_t * __restrict prg, u_int execNum) |
io_progOpen(prog_t * __restrict prg, u_int execNum) |
{ |
{ |
|
#ifdef POPEN_STREAM |
FILE *f; |
FILE *f; |
|
#else |
|
int f; |
|
#endif |
int stat, ret = 0; |
int stat, ret = 0; |
register int i; |
register int i; |
pid_t pid; |
pid_t pid; |
Line 136 io_progOpen(prog_t * __restrict prg, u_int execNum)
|
Line 146 io_progOpen(prog_t * __restrict prg, u_int execNum)
|
for (i = 0; (execNum ? ret < execNum : 42) && i < array_Size(prg->prog_fds); i++) |
for (i = 0; (execNum ? ret < execNum : 42) && i < array_Size(prg->prog_fds); i++) |
if (!array_Get(prg->prog_fds, i)) { |
if (!array_Get(prg->prog_fds, i)) { |
f = e_popen(prg->prog_name, "r+", &pid); |
f = e_popen(prg->prog_name, "r+", &pid); |
|
#ifdef POPEN_STREAM |
if (!f) { |
if (!f) { |
|
#else |
|
if (f == -1) { |
|
#endif |
LOGERR; |
LOGERR; |
ret = -1; |
ret = -1; |
break; |
break; |
Line 202 io_progVacuum(prog_t * __restrict prg, u_int toNum)
|
Line 216 io_progVacuum(prog_t * __restrict prg, u_int toNum)
|
pthread_mutex_lock(&prg->prog_mtx); |
pthread_mutex_lock(&prg->prog_mtx); |
for (i = array_Size(prg->prog_fds) - 1; prg->prog_cnum > toNum && i > -1; i--) |
for (i = array_Size(prg->prog_fds) - 1; prg->prog_cnum > toNum && i > -1; i--) |
if (array_Get(prg->prog_fds, i) && isclr(prg->prog_used, i)) { |
if (array_Get(prg->prog_fds, i) && isclr(prg->prog_used, i)) { |
|
#ifdef POPEN_STREAM |
e_pclose(array(prg->prog_fds, i, FILE*)); |
e_pclose(array(prg->prog_fds, i, FILE*)); |
|
#else |
|
e_pclose((int) array(prg->prog_fds, i, intptr_t)); |
|
#endif |
array_Del(prg->prog_fds, i, 0); |
array_Del(prg->prog_fds, i, 0); |
prg->prog_cnum--; |
prg->prog_cnum--; |
ret++; |
ret++; |
Line 231 io_progCheck(prog_t * __restrict prg)
|
Line 249 io_progCheck(prog_t * __restrict prg)
|
pthread_mutex_lock(&prg->prog_mtx); |
pthread_mutex_lock(&prg->prog_mtx); |
for (i = 0; i < array_Size(prg->prog_fds); i++) |
for (i = 0; i < array_Size(prg->prog_fds); i++) |
if (array_Get(prg->prog_fds, i) && |
if (array_Get(prg->prog_fds, i) && |
|
#ifdef POPEN_STREAM |
(p = pio_pgetpid(array(prg->prog_fds, i, FILE*)))) |
(p = pio_pgetpid(array(prg->prog_fds, i, FILE*)))) |
|
#else |
|
(p = pio_pgetpid((int) array(prg->prog_fds, i, intptr_t)))) |
|
#endif |
if (waitpid(p->pid, &p->stat, WNOHANG) > 0) { |
if (waitpid(p->pid, &p->stat, WNOHANG) > 0) { |
clrbit(prg->prog_used, i); |
clrbit(prg->prog_used, i); |
ret++; |
ret++; |
Line 247 io_progCheck(prog_t * __restrict prg)
|
Line 269 io_progCheck(prog_t * __restrict prg)
|
* @prg = program pool |
* @prg = program pool |
* return: NULL error or !=NULL attached program handle |
* return: NULL error or !=NULL attached program handle |
*/ |
*/ |
|
#ifdef POPEN_STREAM |
FILE * |
FILE * |
|
#else |
|
int |
|
#endif |
io_progAttach(prog_t * __restrict prg) |
io_progAttach(prog_t * __restrict prg) |
{ |
{ |
|
#ifdef POPEN_STREAM |
FILE *f = NULL; |
FILE *f = NULL; |
|
#else |
|
int f = -1; |
|
#endif |
register int i; |
register int i; |
|
|
if (!prg) |
if (!prg) |
|
#ifdef POPEN_STREAM |
return NULL; |
return NULL; |
|
#else |
|
return -1; |
|
#endif |
|
|
pthread_mutex_lock(&prg->prog_mtx); |
pthread_mutex_lock(&prg->prog_mtx); |
for (i = 0; i < array_Size(prg->prog_fds); i++) |
for (i = 0; i < array_Size(prg->prog_fds); i++) |
if (array_Get(prg->prog_fds, i) && isclr(prg->prog_used, i)) { |
if (array_Get(prg->prog_fds, i) && isclr(prg->prog_used, i)) { |
setbit(prg->prog_used, i); |
setbit(prg->prog_used, i); |
|
#ifdef POPEN_STREAM |
f = array(prg->prog_fds, i, FILE*); |
f = array(prg->prog_fds, i, FILE*); |
|
#else |
|
f = array(prg->prog_fds, i, intptr_t); |
|
#endif |
break; |
break; |
} |
} |
pthread_mutex_unlock(&prg->prog_mtx); |
pthread_mutex_unlock(&prg->prog_mtx); |
Line 276 io_progAttach(prog_t * __restrict prg)
|
Line 314 io_progAttach(prog_t * __restrict prg)
|
* return: none |
* return: none |
*/ |
*/ |
void |
void |
|
#ifdef POPEN_STREAM |
io_progDetach(prog_t * __restrict prg, FILE *pfd) |
io_progDetach(prog_t * __restrict prg, FILE *pfd) |
|
#else |
|
io_progDetach(prog_t * __restrict prg, int pfd) |
|
#endif |
{ |
{ |
register int i; |
register int i; |
|
|
Line 285 io_progDetach(prog_t * __restrict prg, FILE *pfd)
|
Line 327 io_progDetach(prog_t * __restrict prg, FILE *pfd)
|
|
|
pthread_mutex_lock(&prg->prog_mtx); |
pthread_mutex_lock(&prg->prog_mtx); |
for (i = 0; i < array_Size(prg->prog_fds); i++) |
for (i = 0; i < array_Size(prg->prog_fds); i++) |
|
#ifdef POPEN_STREAM |
if (array(prg->prog_fds, i, FILE*) == pfd) { |
if (array(prg->prog_fds, i, FILE*) == pfd) { |
|
#else |
|
if (array(prg->prog_fds, i, intptr_t) == pfd) { |
|
#endif |
clrbit(prg->prog_used, i); |
clrbit(prg->prog_used, i); |
break; |
break; |
} |
} |