version 1.1.2.1, 2013/12/05 12:43:04
|
version 1.1.2.6, 2013/12/05 15:18:22
|
Line 36 io_progInit(const char *progName, u_int initNum, u_int
|
Line 36 io_progInit(const char *progName, u_int initNum, u_int
|
} |
} |
|
|
pthread_mutex_init(&prg->prog_mtx, NULL); |
pthread_mutex_init(&prg->prog_mtx, NULL); |
|
|
|
if (io_progOpen(prg, prg->prog_inin) < 0) { |
|
io_progDestroy(&prg); |
|
prg = NULL; |
|
} |
return prg; |
return prg; |
} |
} |
|
|
Line 84 io_progClose(prog_t * __restrict prg, u_int closeNum)
|
Line 89 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)) { |
pclose(array(prg->prog_fds, i, FILE*)); | e_pclose(array(prg->prog_fds, i, FILE*)); |
array_Del(prg->prog_fds, i, 0); |
array_Del(prg->prog_fds, i, 0); |
prg->prog_cnum--; |
prg->prog_cnum--; |
ret++; |
ret++; |
Line 105 int
|
Line 110 int
|
io_progOpen(prog_t * __restrict prg, u_int execNum) |
io_progOpen(prog_t * __restrict prg, u_int execNum) |
{ |
{ |
FILE *f; |
FILE *f; |
int ret = 0; | int stat, ret = 0; |
register int i; |
register int i; |
|
pid_t pid; |
|
|
if (!prg) |
if (!prg) |
return 0; |
return 0; |
Line 118 io_progOpen(prog_t * __restrict prg, u_int execNum)
|
Line 124 io_progOpen(prog_t * __restrict prg, u_int execNum)
|
pthread_mutex_lock(&prg->prog_mtx); |
pthread_mutex_lock(&prg->prog_mtx); |
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 = popen(prg->prog_name, "r+"); | f = e_popen(prg->prog_name, "r+", &pid); |
if (!f) { |
if (!f) { |
LOGERR; |
LOGERR; |
ret *= -1; | ret = -1; |
break; |
break; |
|
} else if (waitpid(pid, &stat, WNOHANG)) { |
|
io_SetErr(ECHILD, "Program with pid=%d exit with status %d", |
|
pid, WIFEXITED(stat) ? WEXITSTATUS(stat) : -1); |
|
ret = -1; |
|
break; |
} else |
} else |
array_Set(prg->prog_fds, i, f); |
array_Set(prg->prog_fds, i, f); |
prg->prog_cnum++; |
prg->prog_cnum++; |
Line 158 io_progVacuum(prog_t * __restrict prg, u_int toNum)
|
Line 169 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)) { |
if (array_Get(prg->prog_fds, i)) { |
pclose(array(prg->prog_fds, i, FILE*)); | e_pclose(array(prg->prog_fds, i, FILE*)); |
array_Del(prg->prog_fds, i, 0); |
array_Del(prg->prog_fds, i, 0); |
prg->prog_cnum--; |
prg->prog_cnum--; |
ret++; |
ret++; |