Changeset 9db944 in git for Singular/links/ssiLink.cc


Ignore:
Timestamp:
Apr 12, 2016, 2:26:05 PM (8 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'a719bcf0b8dbc648b128303a49777a094b57592c')
Children:
1a1f82bc8f8fca00c6831cafb921250413a6c7d2
Parents:
9ef321bcdf1ec45cb2df3f22b14b2a6c67306895
Message:
fix: slClose/slPrepColse re-considered
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/links/ssiLink.cc

    r9ef321 r9db944  
    11211121  if (l!=NULL)
    11221122  {
     1123    SI_LINK_SET_CLOSE_P(l);
    11231124    ssiInfo *d = (ssiInfo *)l->data;
    11241125    if (d!=NULL)
     
    11431144    if (d!=NULL)
    11441145    {
     1146      // send quit signal
    11451147      if ((d->send_quit_at_exit)
    11461148      && (d->quit_sent==0))
     
    11481150        fputs("99\n",d->f_write);
    11491151        fflush(d->f_write);
    1150         if (d->f_read!=NULL) { s_close(d->f_read);s_free(d->f_read);}
    1151         if (d->f_write!=NULL) { fclose(d->f_write); d->f_write=NULL; }
    11521152      }
     1153      // clean ring
    11531154      if (d->r!=NULL) rKill(d->r);
     1155      // did the child to stop ?
    11541156      si_waitpid(d->pid,NULL,WNOHANG);
    11551157      if ((d->pid!=0)
     
    11631165        loop
    11641166        {
     1167          // wait till signal or time rem:
    11651168          r = nanosleep(&t, &rem);
    11661169          t = rem;
     
    11701173          if ((r==0) || (errno != EINTR)) break;
    11711174        }
    1172         if (kill(d->pid,0) == 0)
     1175        if (kill(d->pid,0) == 0) // pid still exists
    11731176        {
    11741177          kill(d->pid,15);
     
    11771180          loop
    11781181          {
     1182            // wait till signal or time rem:
    11791183            r = nanosleep(&t, &rem);
    11801184            t = rem;
    11811185            // child finished:
    11821186            if (si_waitpid(d->pid,NULL,WNOHANG) != 0) break;
    1183             // other signal, waited s>= 100 ms:
     1187            // other signal, waited s>=  5 s:
    11841188            if ((r==0) || (errno != EINTR)) break;
    11851189          }
     
    11911195        }
    11921196      }
    1193       if (d->f_read!=NULL) { s_close(d->f_read);s_free(d->f_read);}
     1197      if (d->f_read!=NULL) { s_close(d->f_read);s_free(d->f_read);d->f_read=NULL;}
    11941198      if (d->f_write!=NULL) { fclose(d->f_write); d->f_write=NULL; }
    11951199      if ((strcmp(l->mode,"tcp")==0)
Note: See TracChangeset for help on using the changeset viewer.