version 1.1.2.20, 2013/12/12 23:06:45
|
version 1.1.2.22, 2013/12/15 22:31:44
|
Line 173 io_progCloseAt(prog_t * __restrict prg, u_int idx)
|
Line 173 io_progCloseAt(prog_t * __restrict prg, u_int idx)
|
} |
} |
|
|
/* |
/* |
|
* io_progCloseOf() - Close program at pool with certain handle |
|
* |
|
* @prg = program pool |
|
* @h = handle of program |
|
* return: 0 error, >0 closed programs |
|
*/ |
|
int |
|
#ifdef POPEN_STREAM |
|
io_progCloseOf(prog_t * __restrict prg, FILE *h) |
|
#else |
|
io_progCloseOf(prog_t * __restrict prg, int h) |
|
#endif |
|
{ |
|
register int i; |
|
int ret = 0; |
|
struct tagPIOPID *p; |
|
#ifdef POPEN_STREAM |
|
FILE *f; |
|
#else |
|
int f; |
|
#endif |
|
|
|
if (!prg) |
|
return 0; |
|
|
|
pthread_mutex_lock(&prg->prog_mtx); |
|
for (i = 0; i < array_Size(prg->prog_fds); i++) |
|
if (array_Get(prg->prog_fds, i)) { |
|
#ifdef POPEN_STREAM |
|
f = array(prg->prog_fds, i, FILE*); |
|
if (f == h && (p = pio_pgetpid(array(prg->prog_fds, i, FILE*)))) { |
|
#else |
|
f = (int) array(prg->prog_fds, i, intptr_t); |
|
if (f == h && (p = pio_pgetpid((int) array(prg->prog_fds, i, intptr_t)))) { |
|
#endif |
|
kill(p->pid, SIGTERM); |
|
usleep(1000); |
|
if (waitpid(p->pid, &p->stat, WNOHANG) > 0) |
|
kill(p->pid, SIGKILL); |
|
#ifdef POPEN_STREAM |
|
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); |
|
clrbit(prg->prog_used, i); |
|
prg->prog_cnum--; |
|
ret++; |
|
break; |
|
} |
|
} |
|
pthread_mutex_unlock(&prg->prog_mtx); |
|
|
|
return ret; |
|
} |
|
|
|
/* |
* io_progOpen2() - Start program from pool on first unused slot |
* io_progOpen2() - Start program from pool on first unused slot |
* |
* |
* @prg = program pool |
* @prg = program pool |
Line 254 io_progOpen(prog_t * __restrict prg, u_int execNum)
|
Line 311 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)) { |
printf("%d) %s!!! %d ret=%d\n", i, __func__, execNum, ret); |
|
f = e_popen(prg->prog_name, "r+", &pid); |
f = e_popen(prg->prog_name, "r+", &pid); |
#ifdef POPEN_STREAM |
#ifdef POPEN_STREAM |
if (!f) { |
if (!f) { |
Line 380 io_progCheck(prog_t * __restrict prg, int re)
|
Line 436 io_progCheck(prog_t * __restrict prg, int re)
|
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 |
#ifdef POPEN_STREAM |
(p = pio_pgetpid(array(prg->prog_fds, i, FILE*)))) | (p = pio_pgetpid(array(prg->prog_fds, i, FILE*)))) { |
#else |
#else |
(p = pio_pgetpid((int) array(prg->prog_fds, i, intptr_t)))) | (p = pio_pgetpid((int) array(prg->prog_fds, i, intptr_t)))) { |
#endif |
#endif |
if (waitpid(p->pid, &p->stat, WNOHANG)) { |
if (waitpid(p->pid, &p->stat, WNOHANG)) { |
clrbit(prg->prog_used, i); |
clrbit(prg->prog_used, i); |
Line 395 io_progCheck(prog_t * __restrict prg, int re)
|
Line 451 io_progCheck(prog_t * __restrict prg, int re)
|
prg->prog_cnum--; |
prg->prog_cnum--; |
ret++; |
ret++; |
} |
} |
|
} |
pthread_mutex_unlock(&prg->prog_mtx); |
pthread_mutex_unlock(&prg->prog_mtx); |
|
|
/* resurrect to init number */ |
/* resurrect to init number */ |
Line 444 io_progAttach(prog_t * __restrict prg, int newOne)
|
Line 501 io_progAttach(prog_t * __restrict prg, int newOne)
|
break; |
break; |
} |
} |
pthread_mutex_unlock(&prg->prog_mtx); |
pthread_mutex_unlock(&prg->prog_mtx); |
|
printf("+ i=%d f=%d\n", i, f); |
|
|
/* execute new one program */ |
/* execute new one program */ |
if (newOne) { |
if (newOne) { |