--- libaitio/src/exec.c 2013/12/08 20:57:32 1.1.2.15 +++ libaitio/src/exec.c 2013/12/12 09:04:22 1.1.2.17 @@ -231,7 +231,8 @@ io_progOpen(prog_t * __restrict prg, u_int execNum) * * @prg = program pool * @toNum = execute to number of programs (0 max) - * return: 0 error, >0 executed programs and abs(<0) executed programs with logged error + * return: 0 error or nothing to do, + * >0 executed programs and abs(<0) executed programs with logged error */ int io_progGrow(prog_t * __restrict prg, u_int toNum) @@ -244,7 +245,12 @@ io_progGrow(prog_t * __restrict prg, u_int toNum) } if (!toNum) toNum = prg->prog_maxn; + if (toNum < prg->prog_inin) + toNum = prg->prog_inin; + if ((toNum - prg->prog_cnum) < 1) + return 0; + return io_progOpen(prg, toNum - prg->prog_cnum); } @@ -337,8 +343,8 @@ io_progCheck(prog_t * __restrict prg, int re) pthread_mutex_unlock(&prg->prog_mtx); /* resurrect */ - if (re && ret > 0) - io_progOpen(prg, ret); + if (re && ret > 0 && prg->prog_inin - prg->prog_cnum) + io_progOpen(prg, prg->prog_inin - prg->prog_cnum); return ret; } @@ -347,6 +353,7 @@ io_progCheck(prog_t * __restrict prg, int re) * io_progAttach() - Attach to open program * * @prg = program pool + * @newOne = Execute new one program after attach * return: NULL error or !=NULL attached program handle */ #ifdef POPEN_STREAM @@ -354,7 +361,7 @@ FILE * #else int #endif -io_progAttach(prog_t * __restrict prg) +io_progAttach(prog_t * __restrict prg, int newOne) { #ifdef POPEN_STREAM FILE *f = NULL; @@ -382,6 +389,10 @@ io_progAttach(prog_t * __restrict prg) break; } pthread_mutex_unlock(&prg->prog_mtx); + + /* execute new one program */ + if (newOne && f) + io_progOpen(prg, 1); return f; }