Diff for /libaitio/src/exec.c between versions 1.1.2.2 and 1.1.2.6

version 1.1.2.2, 2013/12/05 12:57:35 version 1.1.2.6, 2013/12/05 15:18:22
Line 37  io_progInit(const char *progName, u_int initNum, u_int Line 37  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))        if (io_progOpen(prg, prg->prog_inin) < 0) {
                 io_progDestroy(&prg);                  io_progDestroy(&prg);
                   prg = NULL;
           }
         return prg;          return prg;
 }  }
   
Line 87  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 108  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 121  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 161  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++;

Removed from v.1.1.2.2  
changed lines
  Added in v.1.1.2.6


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>