Changeset 7a81686 in git for Singular/iparith.cc


Ignore:
Timestamp:
Mar 8, 2011, 3:35:04 PM (12 years ago)
Author:
Andreas Steenpaß <steenpas@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '0604212ebb110535022efecad887940825b97c3f')
Children:
cf29d0c4a67afdf6039daded7f0bcbd17622873a
Parents:
8a9bcca97de899994799612c3fb8014a6b008467
Message:
waitfirst and waitall adjusted

git-svn-id: file:///usr/local/Singular/svn/trunk@13945 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/iparith.cc

    r8a9bcca r7a81686  
    31983198static BOOLEAN jjWAIT1ST2(leftv res, leftv u, leftv v)
    31993199{
     3200// input: u: a list with links of type
     3201//           ssi-fork, ssi-tcp, MPtcp-fork or MPtcp-launch
     3202//        v: timeout for select in seconds
     3203//           or 0 for polling
     3204// returns: ERROR (via Werror): timeout negative
     3205//           0: timeout (or polling): none ready
     3206//           i>0: (at least) L[i] is ready
    32003207  lists Lforks = (lists)u->Data();
    32013208  int t = (int)(long)v->Data();
     3209  if(t < 0)
     3210  {
     3211    WerrorS("negative timeout"); return TRUE;
     3212  }
    32023213  int i = slStatusSsiL(Lforks, t*1000);
    3203   if ( i < 0 ) i = 0;
    32043214  res->data = (void*)(long)i;
    32053215  return FALSE;
     
    32073217static BOOLEAN jjWAITALL2(leftv res, leftv u, leftv v)
    32083218{
    3209 /* returns 1 iff all forks are finished; 0 otherwise */
    3210   lists Lforks = (lists)u->Data();
     3219// input: u: a list with links of type
     3220//           ssi-fork, ssi-tcp, MPtcp-fork or MPtcp-launch
     3221//        v: timeout for select in seconds
     3222//           or 0 for polling
     3223// returns: ERROR (via Werror): timeout negative
     3224//           0: timeout (or polling): none ready
     3225//           1: all links are ready
     3226  lists Lforks = (lists)u->CopyD();
    32113227  int timeout = 1000*(int)(long)v->Data();
    3212   lists oneFork=(lists)omAllocBin(slists_bin);
    3213   oneFork->Init(1);
     3228  if(timeout < 0)
     3229  {
     3230    WerrorS("negative timeout"); return TRUE;
     3231  }
     3232  int t = getRTimer()/timer_resolution;
    32143233  int i;
    3215   int t = getTimer();
    32163234  int ret = 1;
    3217   for (int j = 0; j <= Lforks->nr; j++)
    3218   {
    3219     oneFork->m[0].Copy(&Lforks->m[j]);
    3220     i = slStatusSsiL(oneFork, timeout);
    3221     if (i == 1)
    3222     {
    3223       timeout = timeout - getTimer() + t;
    3224     }
    3225     else { ret = 0; j = Lforks->nr+1; /* terminate the for loop */ }
    3226     omFreeSize((ADDRESS)oneFork->m,sizeof(sleftv));
    3227   }
    3228   omFreeBin((ADDRESS)oneFork, slists_bin);
     3235  for(int nfinished = 0; nfinished < Lforks->nr; nfinished++)
     3236  {
     3237    i = slStatusSsiL(Lforks, timeout);
     3238    if(i > 0)
     3239    {
     3240      Lforks->m[i-1].CleanUp();
     3241      Lforks->m[i-1].rtyp=DEF_CMD;
     3242      Lforks->m[i-1].data=NULL;
     3243      timeout = si_max(0,timeout - getRTimer()/timer_resolution + t);
     3244    }
     3245    else { ret = 0; break; /* terminate the for loop */ }
     3246  }
     3247  Lforks->Clean();
    32293248  res->data = (void*)(long)ret;
    32303249  return FALSE;
     
    45974616BOOLEAN jjWAIT1ST1(leftv res, leftv a)
    45984617{
     4618// input: a: a list with links of type
     4619//           ssi-fork, ssi-tcp, MPtcp-fork or MPtcp-launch
     4620// returns: i>0: (at least) a[i] is ready
    45994621  lists Lforks = (lists)a->Data();
    46004622  int i = slStatusSsiL(Lforks, -1);
    4601   while (i <= 0) i = slStatusSsiL(Lforks, 10000000); /* redo this all 10 seconds */
    46024623  res->data = (void*)(long)i;
    46034624  return FALSE;
     
    46054626BOOLEAN jjWAITALL1(leftv res, leftv a)
    46064627{
    4607   lists Lforks = (lists)a->Data();
    4608   lists oneFork=(lists)omAllocBin(slists_bin);
    4609   oneFork->Init(1);
     4628// input: a: a list with links of type
     4629//           ssi-fork, ssi-tcp, MPtcp-fork or MPtcp-launch
     4630// returns: nothing. All links are ready when finished.
     4631  lists Lforks = (lists)u->CopyD();
    46104632  int i;
    4611   for (int j = 0; j <= Lforks->nr; j++)
    4612   {
    4613     oneFork->m[0].Copy(&Lforks->m[j]);
    4614     i = slStatusSsiL(oneFork, -1);
    4615     while (i != 1) i = slStatusSsiL(oneFork, 10000000); /* redo this all 10 seconds */
    4616     omFreeSize((ADDRESS)oneFork->m,sizeof(sleftv));
    4617   }
    4618   omFreeBin((ADDRESS)oneFork, slists_bin);
     4633  for(int nfinished = 0; nfinished < Lforks->nr; nfinished++)
     4634  {
     4635    i = slStatusSsiL(Lforks, -1);
     4636    Lforks->m[i-1].CleanUp();
     4637    Lforks->m[i-1].rtyp=DEF_CMD;
     4638    Lforks->m[i-1].data=NULL;
     4639  }
     4640  Lforks->Clean();
    46194641  return FALSE;
    46204642}
Note: See TracChangeset for help on using the changeset viewer.