Changeset ea8692 in git for Singular


Ignore:
Timestamp:
May 18, 2015, 5:29:22 PM (9 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
Children:
b7b51e5dd11e262b4887f510543fc5600bc0c00b
Parents:
01b7f7a9030616e6d505c575db91b858569380a3
Message:
ssi close handling
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/links/ssiLink.cc

    r01b7f7 rea8692  
    11391139        fputs("99\n",d->f_write);
    11401140        fflush(d->f_write);
     1141        if (d->f_read!=NULL) { s_close(d->f_read);s_free(d->f_read);}
     1142        if (d->f_write!=NULL) { fclose(d->f_write); d->f_write=NULL; }
    11411143      }
    11421144      if (d->r!=NULL) rKill(d->r);
     
    11501152        struct timespec rem;
    11511153        int r;
    1152         do
     1154        loop
    11531155        {
    11541156          r = nanosleep(&t, &rem);
    11551157          t = rem;
    1156         } while ((r < 0) && (errno == EINTR)
    1157             && (si_waitpid(d->pid,NULL,WNOHANG) == 0));
    1158         if ((r == 0) && (kill(d->pid,0) == 0))
     1158          // child finished:
     1159          if (si_waitpid(d->pid,NULL,WNOHANG) != 0) break;
     1160          // other signal, waited s>= 100 ms:
     1161          if ((r==0) || (errno != EINTR)) break;
     1162        }
     1163        if (kill(d->pid,0) == 0)
    11591164        {
    11601165          kill(d->pid,15);
    11611166          t.tv_sec=5; // <=5s
    11621167          t.tv_nsec=0;
    1163           do
     1168          loop
    11641169          {
    11651170            r = nanosleep(&t, &rem);
    11661171            t = rem;
    1167           } while ((r < 0) && (errno == EINTR)
    1168               && (si_waitpid(d->pid,NULL,WNOHANG) == 0));
    1169           if ((r == 0) && (kill(d->pid,0) == 0))
     1172            // child finished:
     1173            if (si_waitpid(d->pid,NULL,WNOHANG) != 0) break;
     1174            // other signal, waited s>= 100 ms:
     1175            if ((r==0) || (errno != EINTR)) break;
     1176          }
     1177          if (kill(d->pid,0) == 0)
    11701178          {
    11711179            kill(d->pid,9); // just to be sure
     
    11741182        }
    11751183      }
    1176       if (d->f_read!=NULL) s_close(d->f_read);
    1177       if (d->f_read!=NULL) s_free(d->f_read);
    1178       if (d->f_write!=NULL) fclose(d->f_write);
     1184      if (d->f_read!=NULL) { s_close(d->f_read);s_free(d->f_read);}
     1185      if (d->f_write!=NULL) { fclose(d->f_write); d->f_write=NULL; }
    11791186      if ((strcmp(l->mode,"tcp")==0)
    11801187      || (strcmp(l->mode,"fork")==0))
Note: See TracChangeset for help on using the changeset viewer.