bool LogAcceptCategory(const char* category) { if (category != NULL) { if (!fDebug) return false; // Give each thread quick access to -debug settings. // This helps prevent issues debugging global destructors, // where mapMultiArgs might be deleted before another // global destructor calls LogPrint() static boost::thread_specific_ptr<set<string> > ptrCategory; if (ptrCategory.get() == NULL) { const vector<string>& categories = mapMultiArgs["-debug"]; ptrCategory.reset(new set<string>(categories.begin(), categories.end())); // thread_specific_ptr automatically deletes the set when the thread ends. // "dash" is a composite category enabling all Dash-related debug output if(ptrCategory->count(string("dash"))) { ptrCategory->insert(string("darksend")); ptrCategory->insert(string("instantx")); ptrCategory->insert(string("masternode")); ptrCategory->insert(string("keepass")); ptrCategory->insert(string("mnpayments")); ptrCategory->insert(string("mnbudget")); } } const set<string>& setCategories = *ptrCategory.get(); // if not debugging everything and not debugging specific category, LogPrint does nothing. if (setCategories.count(string("")) == 0 && setCategories.count(string(category)) == 0) return false; } return true; }
bool LogAcceptCategory(const char* category) { if (category != NULL) { // Give each thread quick access to -debug settings. // This helps prevent issues debugging global destructors, // where mapMultiArgs might be deleted before another // global destructor calls LogPrint() static boost::thread_specific_ptr<set<string> > ptrCategory; if (!fDebug) { if (ptrCategory.get() != NULL) { LogPrintf("debug turned off: thread %s\n", GetThreadName()); ptrCategory.release(); } return false; } if (ptrCategory.get() == NULL) { std::string strThreadName = GetThreadName(); LogPrintf("debug turned on:\n"); for (int i = 0; i < (int)mapMultiArgs["-debug"].size(); ++i) LogPrintf(" thread %s category %s\n", strThreadName, mapMultiArgs["-debug"][i]); const vector<string>& categories = mapMultiArgs["-debug"]; ptrCategory.reset(new set<string>(categories.begin(), categories.end())); // thread_specific_ptr automatically deletes the set when the thread ends. // "dash" is a composite category enabling all Dash-related debug output if(ptrCategory->count(string("dash"))) { ptrCategory->insert(string("privatesend")); ptrCategory->insert(string("instantsend")); ptrCategory->insert(string("masternode")); ptrCategory->insert(string("spork")); ptrCategory->insert(string("keepass")); ptrCategory->insert(string("mnpayments")); ptrCategory->insert(string("gobject")); } } const set<string>& setCategories = *ptrCategory.get(); // if not debugging everything and not debugging specific category, LogPrint does nothing. if (setCategories.count(string("")) == 0 && setCategories.count(string("1")) == 0 && setCategories.count(string(category)) == 0) return false; } return true; }