Changeset 336 for cpp/frams/errmgr/errmanager.cpp
- Timestamp:
- 03/12/15 04:19:45 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/errmgr/errmanager.cpp
r286 r336 8 8 void _FramMessageSingleLine(const char *o, const char *m, const char *txt, int w) 9 9 { 10 tlsGetRef(errmgr_instance).send(o,m,txt,w);10 tlsGetRef(errmgr_instance).send(o, m, txt, w); 11 11 } 12 12 13 THREAD_LOCAL_DEF(ErrorManager, errmgr_instance);13 THREAD_LOCAL_DEF(ErrorManager, errmgr_instance); 14 14 15 void ErrorManager::send(int level, const char *o,const char *m,const char *bl,int w)15 void ErrorManager::send(int level, const char *o, const char *m, const char *bl, int w) 16 16 { 17 if (level>=handlers.size()) level=handlers.size()-1;18 bool blocked=0;19 for(int i=level;i>=0;i--)17 if (level >= handlers.size()) level = handlers.size() - 1; 18 bool blocked = 0; 19 for (int i = level; i >= 0; i--) 20 20 { 21 ErrorHandlerBase *r=handlers(i); 22 if ((!blocked)||(r->options & ErrorHandlerBase::CannotBeBlocked)) 23 r->handle(o,m,bl,w); 24 if (!(r->options & ErrorHandlerBase::DontBlock)) blocked=1; 21 ErrorHandlerBase *r = handlers(i); 22 if ((!(r->options & ErrorHandlerBase::Paused)) && 23 ((!blocked) || (r->options & ErrorHandlerBase::CannotBeBlocked))) 24 { 25 r->handle(o, m, bl, w); 26 if (!(r->options & ErrorHandlerBase::DontBlock)) blocked = 1; 27 } 25 28 } 26 29 } … … 28 31 int ErrorManager::add(ErrorHandlerBase *h) 29 32 { 30 h->mgr=this;31 handlers+=h;32 return handlers.size()-1;33 h->mgr = this; 34 handlers += h; 35 return handlers.size() - 1; 33 36 } 34 37 35 38 void ErrorManager::remove(int i) 36 39 { 37 ErrorHandlerBase *h=handlers(i);38 h->mgr=0;39 handlers.remove(i);40 ErrorHandlerBase *h = handlers(i); 41 h->mgr = 0; 42 handlers.remove(i); 40 43 } 41 44 42 45 void ErrorManager::remove(ErrorHandlerBase *h) 43 46 { 44 int i;45 if ((i=handlers.find(h))<0) return;46 remove(i);47 int i; 48 if ((i = handlers.find(h)) < 0) return; 49 remove(i); 47 50 } 48 51 49 52 void ErrorManager::removeAll() 50 53 { 51 while(handlers.size()>0)52 remove(handlers.size()-1);54 while (handlers.size() > 0) 55 remove(handlers.size() - 1); 53 56 } 54 57 55 58 ////////////////////////////////// 56 59 57 void ErrorHandlerBase::send(const char *o, const char *m,const char *bl,int w)60 void ErrorHandlerBase::send(const char *o, const char *m, const char *bl, int w) 58 61 { 59 if (!isEnabled()) return;60 int level=mgr->find(this);61 if (level>=0) mgr->send(level-1,o,m,bl,w);62 if (!isEnabled()) return; 63 int level = mgr->find(this); 64 if (level >= 0) mgr->send(level - 1, o, m, bl, w); 62 65 } 63 66 64 void ErrorHandlerBase::FMprintf(const char *o, const char *m,int w,const char *bl, ...)67 void ErrorHandlerBase::FMprintf(const char *o, const char *m, int w, const char *bl, ...) 65 68 { 66 if (!isEnabled()) return;67 string buf;68 va_list argptr;69 va_start(argptr,bl);70 buf=ssprintf_va(bl,argptr);71 va_end(argptr);72 send(o,m,buf.c_str(),w);69 if (!isEnabled()) return; 70 string buf; 71 va_list argptr; 72 va_start(argptr, bl); 73 buf = ssprintf_va(bl, argptr); 74 va_end(argptr); 75 send(o, m, buf.c_str(), w); 73 76 } 74 77 … … 76 79 void ErrorHandlerBase::enable() 77 80 { 78 if (isEnabled()) return;79 tlsGetRef(errmgr_instance).add(this);81 if (isEnabled()) return; 82 tlsGetRef(errmgr_instance).add(this); 80 83 } 81 84 82 85 void ErrorHandlerBase::disable() 83 86 { 84 if (!isEnabled()) return; 85 tlsGetRef(errmgr_instance).remove(this); 87 if (!isEnabled()) return; 88 tlsGetRef(errmgr_instance).remove(this); 89 } 90 91 void ErrorHandlerBase::pause() 92 { 93 if (isPaused()) return; 94 options |= Paused; 95 } 96 97 void ErrorHandlerBase::resume() 98 { 99 if (!isPaused()) return; 100 options &= ~Paused; 86 101 } 87 102 88 103 ///////////////////////////////// 89 104 90 void ErrorHandler::handle(const char *o, const char *m,const char *bl,int w)105 void ErrorHandler::handle(const char *o, const char *m, const char *bl, int w) 91 106 { 92 if (w>maxlevel) maxlevel=w;93 if (w>=FMLV_INFO) infocount++;94 if (w>=FMLV_WARN) warncount++;95 if (w>=FMLV_ERROR) errcount++;107 if (w > maxlevel) maxlevel = w; 108 if (w >= FMLV_INFO) infocount++; 109 if (w >= FMLV_WARN) warncount++; 110 if (w >= FMLV_ERROR) errcount++; 96 111 97 if (w>=storlevel)112 if (w >= storlevel) 98 113 { 99 storcount++;100 if (options & (StoreFirstMessage|StoreAllMessages))114 storcount++; 115 if (options & (StoreFirstMessage | StoreAllMessages)) 101 116 { 102 if (!((options&StoreFirstMessage)&&(msgs.len()>0)))117 if (!((options&StoreFirstMessage) && (msgs.len() > 0))) 103 118 { 104 if (msgs.len()>0) msgs+='\n';105 msgs+=o; msgs+="::"; msgs+=m;106 msgs+=" - "; msgs+=bl;119 if (msgs.len() > 0) msgs += '\n'; 120 msgs += o; msgs += "::"; msgs += m; 121 msgs += " - "; msgs += bl; 107 122 } 108 123 }
Note: See TracChangeset
for help on using the changeset viewer.