CMS 3D CMS Logo

MessageSender.cc

Go to the documentation of this file.
00001 #include "FWCore/MessageLogger/interface/MessageSender.h"
00002 #include "FWCore/MessageLogger/interface/MessageLoggerQ.h"
00003 #include "FWCore/MessageLogger/interface/MessageDrop.h"
00004 
00005 #define TRACE_DROP
00006 #ifdef TRACE_DROP
00007 #include <iostream>
00008 #endif
00009 
00010 // Change log
00011 //
00012 //  1  mf 8/25/08       keeping the error summary information for
00013 //                      LoggedErrorsSummary()
00014 //                      
00015 
00016 
00017 using namespace edm;
00018 
00019 bool MessageSender::errorSummaryIsBeingKept = false;            // change log 1
00020 bool MessageSender::freshError              = false;
00021 std::map<ErrorSummaryMapKey, unsigned int> MessageSender::errorSummaryMap; 
00022 
00023 MessageSender::MessageSender( ELseverityLevel const & sev, 
00024                               ELstring const & id,
00025                               bool verbatim )
00026 : errorobj_p( new ErrorObj(sev,id,verbatim) )
00027 {
00028   //std::cout << "MessageSender ctor; new ErrorObj at: " << errorobj_p << '\n';
00029 }
00030 
00031 MessageSender::MessageSender( ELseverityLevel const & sev, 
00032                               ELstring const & id )
00033 : errorobj_p( new ErrorObj(sev,id,false) )
00034 {
00035   //std::cout << "MessageSender ctor; new ErrorObj at: " << errorobj_p << '\n';
00036 }
00037 
00038 
00039 // This destructor must not be permitted to throw. A
00040 // boost::thread_resoruce_error is thrown at static destruction time,
00041 // if the MessageLogger library is loaded -- even if it is not used.
00042 MessageSender::~MessageSender()
00043 {
00044   try 
00045     {
00046       //std::cout << "MessageSender dtor; ErrorObj at: " << errorobj_p << '\n';
00047 
00048       // surrender ownership of our ErrorObj, transferring ownership
00049       // (via the intermediate MessageLoggerQ) to the MessageLoggerScribe
00050       // that will (a) route the message text to its destination(s)
00051       // and will then (b) dispose of the ErrorObj
00052       
00053       MessageDrop * drop = MessageDrop::instance();
00054       if (drop) {
00055         errorobj_p->setModule(drop->moduleName);
00056         errorobj_p->setContext(drop->runEvent);
00057       } 
00058 #ifdef TRACE_DROP
00059       if (!drop) std::cerr << "MessageSender::~MessageSender() - Null drop pointer \n";
00060 #endif
00061                                                                 // change log 1
00062       if ( errorSummaryIsBeingKept && 
00063            errorobj_p->xid().severity >= ELwarning ) 
00064       {                         
00065         ELextendedID const & xid = errorobj_p->xid();
00066         ErrorSummaryMapKey key (xid.id, xid.module);
00067         ErrorSummaryMapIterator i = errorSummaryMap.find(key);
00068         if (i != errorSummaryMap.end()) {
00069           ++(i->second);  // same as ++errorSummaryMap[key]
00070         } else {
00071           errorSummaryMap[key] = 1;
00072         }
00073         freshError = true;
00074       }
00075       
00076       MessageLoggerQ::MLqLOG(errorobj_p);
00077     }
00078   catch ( ... )
00079     {
00080       // nothing to do
00081       
00082       // for test that removal of thread-involved static works, 
00083       // simply throw here, then run in trivial_main in totalview
00084       // and Next or Step so that the exception would be detected.
00085       // That test has been done 12/14/07.
00086     }
00087 }

Generated on Tue Jun 9 17:36:17 2009 for CMSSW by  doxygen 1.5.4