CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/EventFilter/Processor/src/SubProcess.cc

Go to the documentation of this file.
00001 #include "SubProcess.h"
00002 #include "FileDescriptorHandler.h"
00003 
00004 #include "EventFilter/Utilities/interface/TriggerReportDef.h"
00005 
00006 namespace evf{
00007 
00008   SubProcess &SubProcess::operator=(const SubProcess &b)
00009   {
00010     ind_=b.ind_;
00011     pid_=b.pid_;
00012     alive_=b.alive_;
00013     mqm_=b.mqm_;
00014     mqs_=b.mqs_;
00015     save_nbp_ = b.save_nbp_;
00016     save_nba_ = b.save_nba_;
00017     save_ndqm_ = b.save_ndqm_;
00018     save_scalers_ = b.save_scalers_;
00019     restart_countdown_=b.restart_countdown_;
00020     reported_inconsistent_=b.reported_inconsistent_;
00021     postponed_trigger_updates_ = b.postponed_trigger_updates_;
00022     return *this;
00023   }
00024 
00025   void SubProcess::disconnect()
00026   {
00027     mqm_->drain();
00028     mqs_->drain();
00029     mqs_->disconnect();
00030     mqm_->disconnect();
00031     save_nbp_ = 0;
00032     save_nba_ = 0;
00033     save_ndqm_ = 0;
00034     save_scalers_ = 0;
00035   }
00036 
00037   void SubProcess::setStatus(int st){
00038     alive_ = st;
00039     if(alive_ != 1) //i.e. process is no longer alive
00040       {
00041         //save counters after last update
00042         save_nbp_ = prg_.nbp;
00043         save_nba_ = prg_.nba;
00044         save_ndqm_  = prg_.dqm;
00045         save_scalers_ = prg_.trp;
00046       }
00047   }
00048 
00049   void SubProcess::setParams(struct prg *p)
00050   {
00051     prg_.ls  = p->ls;
00052     prg_.eols  = p->eols;
00053     prg_.ps  = p->ps;
00054     prg_.nbp = p->nbp + save_nbp_;
00055     prg_.nba = p->nba + save_nba_;
00056     prg_.Ms  = p->Ms;
00057     prg_.ms  = p->ms;
00058     prg_.dqm = p->dqm + save_ndqm_;
00059     prg_.trp = p->trp + save_scalers_;
00060   }
00061 
00062   int SubProcess::forkNew()
00063   {
00064     mqm_->drain();
00065     mqs_->drain();
00066     pid_t retval = -1;
00067     retval = fork();
00068     reported_inconsistent_ = false;
00069     nfound_invalid_ = 0;
00070     postponed_trigger_updates_.clear();
00071     if(retval>0)
00072       {
00073         pid_ = retval;
00074         alive_=1;
00075       }
00076     if(retval==0)
00077       {
00078         //        freopen(filename,"w",stdout); // send all console output from children to /dev/null
00079         freopen("/dev/null","w",stderr);
00080         FileDescriptorHandler a; //handle socket file descriptors left open at fork
00081         sqm_ = new SlaveQueue(monitor_queue_offset_+ind_);
00082         sqs_ = new SlaveQueue(ind_);
00083       }
00084     return retval;
00085   }
00086   void SubProcess::add_postponed_trigger_update(MsgBuf &b)
00087   {
00088     postponed_trigger_updates_.push_back(b);
00089   }
00090   bool SubProcess::check_postponed_trigger_update(MsgBuf &b, unsigned int ls)
00091   {
00092     for(std::vector<MsgBuf>::iterator i = postponed_trigger_updates_.begin(); i != postponed_trigger_updates_.end(); i++)
00093       {
00094         TriggerReportStatic *trp = (TriggerReportStatic *)((*i)->mtext);
00095          if(trp->lumiSection == ls){
00096            b = (*i);
00097            postponed_trigger_updates_.erase(i);
00098            return true;
00099          }
00100       }
00101     return false;
00102   }
00103 
00104 
00105 }