Variant *get_intercept_handler(CStrRef name, char* flag) { TRACE(1, "get_intercept_handler %s flag is %d\n", name.get()->data(), (int)*flag); if (*flag == -1) { Lock lock(s_mutex); if (*flag == -1) { StringData *sd = name.get(); if (!sd->isStatic()) { sd = StringData::GetStaticString(sd); } s_registered_flags[StrNR(sd)].push_back(flag); *flag = 0; } } Variant *handler = get_enabled_intercept_handler(name); if (handler == nullptr) { return nullptr; } *flag = 1; return handler; }
Variant *get_intercept_handler(const String& name, char* flag) { TRACE(1, "get_intercept_handler %s flag is %d\n", name.get()->data(), (int)*flag); if (*flag == -1) { Lock lock(s_mutex); if (*flag == -1) { StringData *sd = name.get(); if (!sd->isStatic()) { sd = makeStaticString(sd); } auto &entry = s_registered_flags[StrNR(sd)]; entry.second.push_back(flag); *flag = entry.first; } if (!*flag) return nullptr; } Variant *handler = get_enabled_intercept_handler(name); if (handler == nullptr) { return nullptr; } assert(*flag); return handler; }