Changeset 11343 for trunk


Ignore:
Timestamp:
07/11/11 16:04:50 (13 years ago)
Author:
tbretz
Message:
Some fixes to the initialization procedure.
Location:
trunk/FACT++/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/EventBuilder.c

    r11335 r11343  
    6060int  g_runStat   ;
    6161int  g_reset     ;
     62int gi_reset, gi_resetR, gi_resetS, gi_resetW, gi_resetX ;
    6263size_t g_maxMem  ;  //maximum memory allowed for buffer
    6364
     
    7677 int gi_memStat = +1 ;
    7778
    78  int32_t gi_myRun ;
     79 uint32_t gi_myRun ;
    7980
    8081
     
    248249
    249250   for (i=0; i<MAX_EVT*MAX_RUN; i++) {
    250       mBuffer[i].evNum = mBuffer[i].runNum = -1;
     251      mBuffer[i].evNum = mBuffer[i].nRoi = -1;
     252      mBuffer[i].runNum= 0 ;
    251253
    252254      evtCtrl.evtBuf[  i] = -1 ;
     
    268270
    269271
    270 int mBufEvt(uint evID, uint runID, uint nRoi) {
     272int mBufEvt( int evID, uint runID, int nRoi) {
    271273// generate a new Event into mBuffer:   
    272274// make sure only complete Event are possible, so 'free' will always work
     
    278280   size_t needmem = 0 ;
    279281
    280    if (nRoi <=0 || nRoi > 1024) {
     282   if (nRoi <0 || nRoi > 1024) {
    281283      snprintf(str,MXSTR,"illegal nRoi: %d",nRoi) ;
    282284      factOut(kError, 1, str ) ;
     
    419421   size_t freemem = 0 ;
    420422
    421    if ( mBuffer[i].nRoi > 0) {      //have an fEvent structure generated ...
    422       freemem = mBuffer[i].evtLen ;
    423       free(mBuffer[i].fEvent ) ;
    424       mBuffer[i].fEvent = NULL ;
    425 
    426       free(mBuffer[i].FADhead ) ;
    427       mBuffer[i].FADhead = NULL ;
    428 
    429    }
     423   freemem = mBuffer[i].evtLen ;
     424
     425   free(mBuffer[i].fEvent ) ;
     426   mBuffer[i].fEvent = NULL ;
     427
     428   free(mBuffer[i].FADhead ) ;
     429   mBuffer[i].FADhead = NULL ;
     430
    430431   headmem = NBOARDS* sizeof(PEVNT_HEADER) ;
    431    mBuffer[i].evNum   = mBuffer[i].runNum = mBuffer[i].nRoi= -1;
     432   mBuffer[i].evNum   = mBuffer[i].nRoi= -1;
     433   mBuffer[i].runNum  = 0;
    432434
    433435   gj.usdMem = gj.usdMem - freemem - headmem;
     
    495497  int errcnt0 = 0 ;
    496498
    497   int reset, resetR, resetS, resetW, resetX ;
    498499  int sockDef[NBOARDS];    //internal state of sockets
    499500
     
    538539     runCtrl[i].fileId = -2 ;
    539540  }
    540   resetS = resetR = 9;
    541 
     541  gi_resetS = gi_resetR = 9;
     542  for (i=0; i<NBOARDS; i++) sockDef[i]= 0 ;
    542543
    543544START:
     
    551552  numok = numok2   = 0 ;
    552553
    553   if ( resetS > 0) {
     554  if ( gi_resetS > 0) {
    554555     //make sure all sockets are preallocated as 'not exist'
    555556     for (i=0; i<MAX_SOCK; i++) {
     
    557558        rd[i].sockStat = 99 ;
    558559     }
    559 
    560      for (i=0; i<NBOARDS; i++) sockDef[i]= 0 ;
    561 
    562   }
    563 
    564 
    565   if ( resetR > 0) {
    566      resetEvtStat();
    567      gj.usdMem = gj.maxMem = gj.xxxMem = 0 ;
    568      gj.totMem = g_maxMem ;
    569      gj.bufNew = gj.bufEvt = 0 ;
    570      gj.evtSkip= gj.evtWrite = gj.evtErr = 0 ;
    571560
    572561     for (k=0; k<NBOARDS; k++) {
     
    579568     }
    580569
     570  }
     571
     572
     573  if ( gi_resetR > 0) {
     574     resetEvtStat();
     575     gj.usdMem = gj.maxMem = gj.xxxMem = 0 ;
     576     gj.totMem = g_maxMem ;
     577     gj.bufNew = gj.bufEvt = 0 ;
     578     gj.evtSkip= gj.evtWrite = gj.evtErr = 0 ;
     579
     580
    581581     mBufInit() ;    //initialize buffers
    582582
     
    586586
    587587
    588   reset = resetR = resetS = resetW = 0 ;
    589 
    590   while (g_runStat >=0 || g_reset ==0 ) {  //loop until global variable g_runStat claims stop
     588  gi_reset = gi_resetR = gi_resetS = gi_resetW = 0 ;
     589
     590  while (g_runStat >=0 && g_reset ==0 ) {  //loop until global variable g_runStat claims stop
    591591
    592592    gi_runStat = g_runStat;
     
    893893                gj.evtSkip++;
    894894             }
    895           } else if (evtCtrl.evtStat[k0] >= 900 ) {
     895          } else if (evtCtrl.evtStat[k0] >= 900     //'delete'
     896                  || evtCtrl.evtStat[k0] == 0 ) {   //'useless'
    896897
    897898             int id =evtCtrl.evtBuf[k0] ;
     
    945946
    946947 if (g_reset >0 ) {
    947    reset  = g_reset ;
    948    resetR = reset%10 ;        //shall we stop reading ?
    949    resetS = (reset/10)%10 ;   //shall we close sockets ?
    950    resetW = (reset/100)%10 ;  //shall we close files ?
    951    resetX = reset/1000 ;      //shall we simply wait resetX seconds ?
     948   gi_reset  = g_reset ;
     949   gi_resetR = gi_reset%10 ;        //shall we stop reading ?
     950   gi_resetS = (gi_reset/10)%10 ;   //shall we close sockets ?
     951   gi_resetW = (gi_reset/100)%10 ;  //shall we close files ?
     952   gi_resetX = gi_reset/1000 ;      //shall we simply wait resetX seconds ?
    952953   g_reset= 0;
    953954 } else {
    954    reset  = 0;
    955    if ( g_runStat==-1 ) resetR = 1 ;
    956    else                 resetR = 7 ;
    957    resetS = 7 ; //close all sockets
    958    resetW = 7 ; //close all files
    959    resetX = 0 ;
     955   gi_reset  = 0;
     956   if ( g_runStat==-1 ) gi_resetR = 1 ;
     957   else                 gi_resetR = 7 ;
     958   gi_resetS = 7 ; //close all sockets
     959   gi_resetW = 7 ; //close all files
     960   gi_resetX = 0 ;
    960961
    961962   //inform others we have to quit ....
     
    964965 }
    965966
    966  if (resetS > 0) {
     967 if (gi_resetS > 0) {
    967968    //must close all open sockets ...
    968969    snprintf(str,MXSTR,"close all sockets ...");
     
    979980
    980981
    981  if (resetR > 0) {
     982 if (gi_resetR > 0) {
    982983    //flag all events as 'read finished'
    983984    int kd = evtCtrl.lastPtr - evtCtrl.frstPtr ;
     
    10011002    //and clear all buffers (might have to wait until all others are done)
    10021003    int minclear ;
    1003     if (resetR == 1) {
     1004    if (gi_resetR == 1) {
    10041005       minclear = 900 ;
    10051006       snprintf(str,MXSTR,"drain all buffers ...");
     
    10351036 }
    10361037
    1037  if (reset > 0) {
    1038     if (resetW > 0) {
     1038 if (gi_reset > 0) {
     1039    if (gi_resetW > 0) {
    10391040       CloseRunFile(0,0,0) ; //ask all Runs to be closed
    10401041    }
    1041     if (resetX > 0) {
    1042        xwait.tv_sec = resetX;
     1042    if (gi_resetX > 0) {
     1043       xwait.tv_sec = gi_resetX;
    10431044       xwait.tv_nsec= 0 ;       
    10441045       nanosleep( &xwait , NULL ) ;
     
    10471048    snprintf(str,MXSTR,"Continue read Process ...");
    10481049    factOut(kInfo,-1, str ) ;
    1049     reset = 0 ;
     1050    gi_reset = 0 ;
    10501051    goto START ;
    10511052 }
     
    10991100//would be better to use bitmaps for evtStat (allow '&' instead of multi-if)
    11001101        if (evtCtrl.evtStat[k0] > 90 && evtCtrl.evtStat[k0] <500) {
     1102
     1103         if ( gi_resetR > 1 ) {    //we are asked to flush buffers asap
     1104           evtCtrl.evtStat[k0] = 991 ;
     1105         } else {
     1106
    11011107           int      id   = evtCtrl.evtBuf[k0] ;
    11021108           int      ievt = mBuffer[id].evNum ;
     
    11411147           gi.procTot++ ;
    11421148           numProc++ ;
    1143            evtCtrl.evtStat[k0] = 520 ;
    11441149           
    11451150           if (i<0) {
    11461151              evtCtrl.evtStat[k0] = 999 ; //flag event to be skipped
    11471152              gi.procErr++ ;
     1153           } else {
     1154              evtCtrl.evtStat[k0] = 520 ;
    11481155           }
     1156         }
    11491157        } else if ( evtCtrl.evtStat[k0] >=0 && evtCtrl.evtStat[k0] < 90 ) {
    11501158           numWait++ ;
     
    12661274//would be better to use bitmaps for evtStat (allow '&' instead of multi-if)
    12671275        if (evtCtrl.evtStat[k0] > 500 && evtCtrl.evtStat[k0] < 900) {
     1276
     1277         if ( gi_resetR > 1 ) {        //we must drain the buffer asap
     1278           evtCtrl.evtStat[k0] = 904 ;
     1279         } else {
     1280
     1281
    12681282           int      id   = evtCtrl.evtBuf[k0] ;
    12691283           uint32_t irun = mBuffer[id].runNum ;
     
    13131327              snprintf(str,MXSTR,"W no open file for this run %d",irun) ;
    13141328              factOut(kWarn,123,str) ;
    1315               evtCtrl.evtStat[k0] = 902 ;
     1329              evtCtrl.evtStat[k0] = 903 ;
    13161330              gi.wrtErr++ ;
    13171331           } else {
     
    13271341                 snprintf(str,MXSTR,"W error writing event for run %d",irun) ;
    13281342                 factOut(kError,503, str ) ;
    1329                  evtCtrl.evtStat[k0] = 901 ;
     1343                 evtCtrl.evtStat[k0] = 902 ;
    13301344                 gi.wrtErr++ ;
    13311345              }
    13321346
    13331347              if ( i < 0
     1348                || runCtrl[j].lastTime  < g_actTime-300
    13341349                || runCtrl[j].closeTime < g_actTime
    1335                 || runCtrl[j].lastTime  < g_actTime-300
    13361350                || runCtrl[j].maxEvt    < runCtrl[j].actEvt )  {
    13371351int ii =0 ;
     
    13571371              }
    13581372           }
    1359         } else if (evtCtrl.evtStat[k0] > 0 ) numWait++ ;
     1373         }
     1374        } else if (evtCtrl.evtStat[k0] > 0
     1375                && evtCtrl.evtStat[k0] < 900 ) numWait++ ;
    13601376     }
    13611377
     
    14081424  snprintf(str,MXSTR,"Abort Writing Process ...");
    14091425  factOut(kInfo,-1, str ) ;
     1426
    14101427closerun:
    14111428  snprintf(str,MXSTR,"Close all open files ...");
     
    14561473  factOut(kInfo,-1, str ) ;
    14571474
     1475/* initialize run control logics */
     1476  for (i=0; i<MAX_RUN; i++) {
     1477     runCtrl[i].runId = 0 ;
     1478     runCtrl[i].fileId = -2 ;
     1479  }
     1480
     1481/* partially initialize event control logics */
     1482  evtCtrl.frstPtr = 0 ;
     1483  evtCtrl.lastPtr = 0 ;
     1484
    14581485//start all threads (more to come) when we are allowed to ....
    14591486  while (g_runStat == 0 ) {
  • trunk/FACT++/src/FAD.h

    r11333 r11343  
    199199
    200200typedef struct {
    201    int32_t evNum ;
     201  int32_t evNum ;
    202202  uint32_t runNum ;
    203   int32_t fadLen ;
    204   int32_t nBoard ;
    205   int16_t board[ NBOARDS ];
    206   int32_t nRoi   ;
     203  int32_t  fadLen ;
     204  int32_t  nBoard ;
     205  int16_t  board[ NBOARDS ];
     206  int32_t  nRoi   ;
    207207  uint32_t pcTime ;
    208   int32_t evtLen ;
    209   EVENT   *fEvent  ;
     208  int32_t  evtLen ;
     209  EVENT   *fEvent ;
    210210  PEVNT_HEADER *FADhead; //
    211211
     
    232232                                //(TO BE REVISED)
    233233
    234   int pcTime[MAX_EVT*MAX_RUN] ;     //time when last action happened
     234  uint32_t pcTime[MAX_EVT*MAX_RUN] ;     //time when last action happened
    235235} EVT_CTRL ;     //internal to eventbuilder
    236236
Note: See TracChangeset for help on using the changeset viewer.