Ignore:
Timestamp:
08/12/11 09:47:58 (13 years ago)
Author:
tbretz
Message:
Latest one socket version with a fix to stop buffering data after the requested number of events.
File:
1 edited

Legend:

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

    r11766 r11895  
    11
    22// // // #define EVTDEBUG
     3
     4#define NUMSOCK   1          //set to 7 for old configuration
     5#define MAXREAD  65536       //64kB wiznet buffer
    36
    47#include <stdlib.h>
     
    1821#include <netinet/tcp.h>
    1922#include <pthread.h>
    20 #include <sched.h>
     23#include <sched.h>                             
    2124
    2225#include "EventBuilder.h"
     
    147150   int32_t bufPos;              //next byte to read to the buffer next
    148151   int32_t bufLen;              //number of bytes left to read
     152// size_t bufLen;               //number of bytes left to read size_t might be better
    149153   int32_t skip;                //number of bytes skipped before start of event
    150154
     
    441445   for (k = 0; k < MAX_RUN; k++) {
    442446      if (runCtrl[k].runId == runID) {
    443          if (runCtrl[k].procId > 0) {   //run is closed -> reject
    444             snprintf (str, MXSTR, "skip event since run %d finished", runID);
    445             factOut (kInfo, 931, str);
    446             return -21;
    447          }
     447//         if (runCtrl[k].procId > 0) {   //run is closed -> reject
     448//            snprintf (str, MXSTR, "skip event since run %d finished", runID);
     449//            factOut (kInfo, 931, str);
     450//            return -21;
     451//         }
    448452
    449453         if (runCtrl[k].roi0 != nRoi[0]
     
    490494      runCtrl[evFree].firstTime = runCtrl[evFree].lastTime = tsec;
    491495      runCtrl[evFree].closeTime = tsec + 3600 * 24;     //max time allowed
    492       runCtrl[evFree].lastTime = 0;
     496//    runCtrl[evFree].lastTime = 0;
    493497
    494498      runTail[evFree].nEventsOk =
     
    768772   numok = numok2 = 0;
    769773
     774   int cntsock = 8 - NUMSOCK ;
     775
    770776   if (gi_resetS > 0) {
    771777      //make sure all sockets are preallocated as 'not exist'
     
    796802         gj.evtSkip = gj.evtWrite = gj.evtErr = 0;
    797803
    798       int b;
     804      int b,p;
    799805      for (b = 0; b < NBOARDS; b++)
    800806         gj.badRoi[b] = 0;
     
    861867
    862868      for (i = 0; i < MAX_SOCK; i++) {  //check all sockets if something to read
    863          b = i / 7;
     869         b = i / 7 ;
     870         p = i % 7 ;
     871
     872//if ( b==32 && p>0) {  ; }
     873if ( p >= NUMSOCK) { ; }
     874else {
    864875         if (sockDef[b] > 0)
    865876            s0 = +1;
     
    881892               rd[i].bufPos = 0;        //  no byte read so far
    882893               rd[i].skip = 0;  //  start empty
    883                gi_NumConnect[b]++;
     894//             gi_NumConnect[b]++;
     895               gi_NumConnect[b] += cntsock ;
     896
    884897               gi.numConn[b]++;
    885898               gj.numConn[b]++;
     
    892905            if (rd[i].bufLen > 0) {     //might be nothing to read [buffer full]
    893906               numok++;
     907               size_t maxread = rd[i].bufLen ;
     908               if (maxread > MAXREAD ) maxread=MAXREAD ;
     909
    894910               jrd =
    895911                  recv (rd[i].socket, &rd[i].rBuf->B[rd[i].bufPos],
    896                         rd[i].bufLen, MSG_DONTWAIT);
     912                        maxread, MSG_DONTWAIT);
     913//                      rd[i].bufLen, MSG_DONTWAIT);
    897914
    898915               if (jrd > 0) {
     
    914931                  GenSock (s0, i, 0, NULL, &rd[i]);
    915932                  gi.gotErr[b]++;
    916                   gi_NumConnect[b]--;
     933//                gi_NumConnect[b]--;
     934                  gi_NumConnect[b]-= cntsock ;
    917935                  gi.numConn[b]--;
    918936                  gj.numConn[b]--;
     
    12201238
    12211239            }                   //end interpreting last read
     1240}
    12221241         }                      //end of successful read anything
    12231242      }                         //finished trying to read all sockets
     
    13521371            GenSock (-1, i, 0, NULL, &rd[i]);   //close and destroy open socket   
    13531372            if (i % 7 == 0) {
    1354                gi_NumConnect[i / 7]--;
     1373//             gi_NumConnect[i / 7]--;
     1374               gi_NumConnect[i / 7]-= cntsock ;
    13551375               gi.numConn[i / 7]--;
    13561376               gj.numConn[i / 7]--;
     
    16441664                     runCtrl[j].fileId = 91;
    16451665                     runCtrl[j].procId = 91;
    1646                   } else {
     1666                  } else {                                                 
    16471667                     snprintf (str, MXSTR, "P opened new run_file %d evt %d",
    16481668                               irun, ievt);
     
    16701690                            "P skip event %d because no active run %d", ievt,
    16711691                            irun);
    1672                   factOut (kInfo, 502, str);
     1692                  factOut (kDebug, 502, str);
    16731693                  evtCtrl.evtStat[k0] = 9091;
    16741694               } else {
    16751695//--------
    16761696//--------
    1677                   int id = evtCtrl.evtBuf[k0];
     1697                      id = evtCtrl.evtBuf[k0];
    16781698                  int itevt = mBuffer[id].trgNum;
    16791699                  int itrg = mBuffer[id].trgTyp;
     
    20802100
    20812101         if (runCtrl[j].procId == 0) {
    2082             runFinish (runCtrl[j].runId);
     2102            runFinish1 (runCtrl[j].runId);
    20832103            runCtrl[j].procId = 92;
    20842104         }
Note: See TracChangeset for help on using the changeset viewer.