Diff for /libaitio/src/exec.c between versions 1.1.2.20 and 1.1.2.22

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) {

Removed from v.1.1.2.20  
changed lines
  Added in v.1.1.2.22


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