Move notifier code to zeek::notifier::detail namespace

This commit is contained in:
Tim Wojtulewicz 2020-08-01 10:49:01 -07:00
parent 1262109e5a
commit cba1bc18a5
7 changed files with 43 additions and 28 deletions

View file

@ -45,7 +45,7 @@ enum IDScope { SCOPE_FUNCTION, SCOPE_MODULE, SCOPE_GLOBAL };
class ID; class ID;
using IDPtr = zeek::IntrusivePtr<ID>; using IDPtr = zeek::IntrusivePtr<ID>;
class ID final : public Obj, public notifier::Modifiable { class ID final : public Obj, public zeek::notifier::detail::Modifiable {
public: public:
static inline const IDPtr nil; static inline const IDPtr nil;

View file

@ -5,25 +5,28 @@
#include <set> #include <set>
notifier::Registry notifier::registry; zeek::notifier::detail::Registry zeek::notifier::detail::registry;
zeek::notifier::detail::Registry& notifier::registry = zeek::notifier::detail::registry;
notifier::Receiver::Receiver() namespace zeek::notifier::detail {
Receiver::Receiver()
{ {
DBG_LOG(zeek::DBG_NOTIFIERS, "creating receiver %p", this); DBG_LOG(zeek::DBG_NOTIFIERS, "creating receiver %p", this);
} }
notifier::Receiver::~Receiver() Receiver::~Receiver()
{ {
DBG_LOG(zeek::DBG_NOTIFIERS, "deleting receiver %p", this); DBG_LOG(zeek::DBG_NOTIFIERS, "deleting receiver %p", this);
} }
notifier::Registry::~Registry() Registry::~Registry()
{ {
while ( registrations.begin() != registrations.end() ) while ( registrations.begin() != registrations.end() )
Unregister(registrations.begin()->first); Unregister(registrations.begin()->first);
} }
void notifier::Registry::Register(Modifiable* m, notifier::Receiver* r) void Registry::Register(Modifiable* m, Receiver* r)
{ {
DBG_LOG(zeek::DBG_NOTIFIERS, "registering object %p for receiver %p", m, r); DBG_LOG(zeek::DBG_NOTIFIERS, "registering object %p for receiver %p", m, r);
@ -31,7 +34,7 @@ void notifier::Registry::Register(Modifiable* m, notifier::Receiver* r)
++m->num_receivers; ++m->num_receivers;
} }
void notifier::Registry::Unregister(Modifiable* m, notifier::Receiver* r) void Registry::Unregister(Modifiable* m, Receiver* r)
{ {
DBG_LOG(zeek::DBG_NOTIFIERS, "unregistering object %p from receiver %p", m, r); DBG_LOG(zeek::DBG_NOTIFIERS, "unregistering object %p from receiver %p", m, r);
@ -47,7 +50,7 @@ void notifier::Registry::Unregister(Modifiable* m, notifier::Receiver* r)
} }
} }
void notifier::Registry::Unregister(Modifiable* m) void Registry::Unregister(Modifiable* m)
{ {
DBG_LOG(zeek::DBG_NOTIFIERS, "unregistering object %p from all notifiers", m); DBG_LOG(zeek::DBG_NOTIFIERS, "unregistering object %p from all notifiers", m);
@ -58,7 +61,7 @@ void notifier::Registry::Unregister(Modifiable* m)
registrations.erase(x.first, x.second); registrations.erase(x.first, x.second);
} }
void notifier::Registry::Modified(Modifiable* m) void Registry::Modified(Modifiable* m)
{ {
DBG_LOG(zeek::DBG_NOTIFIERS, "object %p has been modified", m); DBG_LOG(zeek::DBG_NOTIFIERS, "object %p has been modified", m);
@ -67,7 +70,7 @@ void notifier::Registry::Modified(Modifiable* m)
i->second->Modified(m); i->second->Modified(m);
} }
void notifier::Registry::Terminate() void Registry::Terminate()
{ {
std::set<Receiver*> receivers; std::set<Receiver*> receivers;
@ -78,8 +81,10 @@ void notifier::Registry::Terminate()
r->Terminate(); r->Terminate();
} }
notifier::Modifiable::~Modifiable() Modifiable::~Modifiable()
{ {
if ( num_receivers ) if ( num_receivers )
registry.Unregister(this); registry.Unregister(this);
} }
} // namespace zeek::notifier::detail

View file

@ -10,7 +10,7 @@
#include <unordered_map> #include <unordered_map>
#include <cstdint> #include <cstdint>
namespace notifier { namespace zeek::notifier::detail {
class Modifiable; class Modifiable;
@ -118,4 +118,14 @@ protected:
uint64_t num_receivers = 0; uint64_t num_receivers = 0;
}; };
} } // namespace zeek::notifier::detail
namespace notifier {
using Receiver [[deprecated("Remove in v4.1. Use zeek::notifier::detail::Receiver.")]] = zeek::notifier::detail::Receiver;
using Registry [[deprecated("Remove in v4.1. Use zeek::notifier::detail::Registry.")]] = zeek::notifier::detail::Registry;
using Modifiable [[deprecated("Remove in v4.1. Use zeek::notifier::detail::Modifiable.")]] = zeek::notifier::detail::Modifiable;
extern zeek::notifier::detail::Registry& registry [[deprecated("Remove from v4.1. Use zeek::notifier::detail::registry.")]];
} // namespace notifier

View file

@ -388,7 +388,7 @@ void Trigger::Timeout()
void Trigger::Register(zeek::detail::ID* id) void Trigger::Register(zeek::detail::ID* id)
{ {
assert(! disabled); assert(! disabled);
notifier::registry.Register(id, this); zeek::notifier::detail::registry.Register(id, this);
Ref(id); Ref(id);
objs.push_back({id, id}); objs.push_back({id, id});
@ -400,7 +400,7 @@ void Trigger::Register(Val* val)
return; return;
assert(! disabled); assert(! disabled);
notifier::registry.Register(val->Modifiable(), this); zeek::notifier::detail::registry.Register(val->Modifiable(), this);
Ref(val); Ref(val);
objs.emplace_back(val, val->Modifiable()); objs.emplace_back(val, val->Modifiable());
@ -412,7 +412,7 @@ void Trigger::UnregisterAll()
for ( const auto& o : objs ) for ( const auto& o : objs )
{ {
notifier::registry.Unregister(o.second, this); zeek::notifier::detail::registry.Unregister(o.second, this);
Unref(o.first); Unref(o.first);
} }
@ -478,7 +478,7 @@ void Trigger::Describe(ODesc* d) const
d->Add("<trigger>"); d->Add("<trigger>");
} }
void Trigger::Modified(notifier::Modifiable* m) void Trigger::Modified(zeek::notifier::detail::Modifiable* m)
{ {
trigger_mgr->Queue(this); trigger_mgr->Queue(this);
} }

View file

@ -26,7 +26,7 @@ namespace zeek::detail::trigger {
class TriggerTimer; class TriggerTimer;
class TriggerTraversalCallback; class TriggerTraversalCallback;
class Trigger final : public Obj, public notifier::Receiver { class Trigger final : public Obj, public zeek::notifier::detail::Receiver {
public: public:
// Don't access Trigger objects; they take care of themselves after // Don't access Trigger objects; they take care of themselves after
// instantiation. Note that if the condition is already true, the // instantiation. Note that if the condition is already true, the
@ -76,7 +76,7 @@ public:
// Overidden from Notifier. We queue the trigger and evaluate it // Overidden from Notifier. We queue the trigger and evaluate it
// later to avoid race conditions. // later to avoid race conditions.
void Modified(notifier::Modifiable* m) override; void Modified(zeek::notifier::detail::Modifiable* m) override;
// Overridden from notifer::Receiver. If we're still waiting // Overridden from notifer::Receiver. If we're still waiting
// on an ID/Val to be modified at termination time, we can't hope // on an ID/Val to be modified at termination time, we can't hope
@ -109,7 +109,7 @@ private:
bool delayed; // true if a function call is currently being delayed bool delayed; // true if a function call is currently being delayed
bool disabled; bool disabled;
std::vector<std::pair<Obj *, notifier::Modifiable*>> objs; std::vector<std::pair<Obj *, zeek::notifier::detail::Modifiable*>> objs;
using ValCache = std::map<const zeek::detail::CallExpr*, Val*>; using ValCache = std::map<const zeek::detail::CallExpr*, Val*>;
ValCache cache; ValCache cache;

View file

@ -341,7 +341,7 @@ public:
// To be overridden by mutable derived class to enable change // To be overridden by mutable derived class to enable change
// notification. // notification.
virtual notifier::Modifiable* Modifiable() { return nullptr; } virtual zeek::notifier::detail::Modifiable* Modifiable() { return nullptr; }
#ifdef DEBUG #ifdef DEBUG
// For debugging, we keep a reference to the global ID to which a // For debugging, we keep a reference to the global ID to which a
@ -771,7 +771,7 @@ protected:
TableVal* table; TableVal* table;
}; };
class TableVal final : public Val, public notifier::Modifiable { class TableVal final : public Val, public zeek::notifier::detail::Modifiable {
public: public:
explicit TableVal(zeek::TableTypePtr t, zeek::detail::AttributesPtr attrs = nullptr); explicit TableVal(zeek::TableTypePtr t, zeek::detail::AttributesPtr attrs = nullptr);
@ -1012,7 +1012,7 @@ public:
[[deprecated("Remove in v4.1. Use MakeHashKey().")]] [[deprecated("Remove in v4.1. Use MakeHashKey().")]]
zeek::detail::HashKey* ComputeHash(const Val* index) const; zeek::detail::HashKey* ComputeHash(const Val* index) const;
notifier::Modifiable* Modifiable() override { return this; } zeek::notifier::detail::Modifiable* Modifiable() override { return this; }
// Retrieves and saves all table state (key-value pairs) for // Retrieves and saves all table state (key-value pairs) for
// tables whose index type depends on the given zeek::RecordType. // tables whose index type depends on the given zeek::RecordType.
@ -1102,7 +1102,7 @@ protected:
static ParseTimeTableStates parse_time_table_states; static ParseTimeTableStates parse_time_table_states;
}; };
class RecordVal final : public Val, public notifier::Modifiable { class RecordVal final : public Val, public zeek::notifier::detail::Modifiable {
public: public:
[[deprecated("Remove in v4.1. Construct from IntrusivePtr instead.")]] [[deprecated("Remove in v4.1. Construct from IntrusivePtr instead.")]]
explicit RecordVal(zeek::RecordType* t, bool init_fields = true); explicit RecordVal(zeek::RecordType* t, bool init_fields = true);
@ -1255,7 +1255,7 @@ public:
unsigned int MemoryAllocation() const override; unsigned int MemoryAllocation() const override;
void DescribeReST(ODesc* d) const override; void DescribeReST(ODesc* d) const override;
notifier::Modifiable* Modifiable() override { return this; } zeek::notifier::detail::Modifiable* Modifiable() override { return this; }
// Extend the underlying arrays of record instances created during // Extend the underlying arrays of record instances created during
// parsing to match the number of fields in the record type (they may // parsing to match the number of fields in the record type (they may
@ -1292,7 +1292,7 @@ protected:
}; };
class VectorVal final : public Val, public notifier::Modifiable { class VectorVal final : public Val, public zeek::notifier::detail::Modifiable {
public: public:
[[deprecated("Remove in v4.1. Construct from IntrusivePtr instead.")]] [[deprecated("Remove in v4.1. Construct from IntrusivePtr instead.")]]
explicit VectorVal(zeek::VectorType* t); explicit VectorVal(zeek::VectorType* t);
@ -1372,7 +1372,7 @@ public:
// Won't shrink size. // Won't shrink size.
unsigned int ResizeAtLeast(unsigned int new_num_elements); unsigned int ResizeAtLeast(unsigned int new_num_elements);
notifier::Modifiable* Modifiable() override { return this; } zeek::notifier::detail::Modifiable* Modifiable() override { return this; }
/** /**
* Inserts an element at the given position in the vector. All elements * Inserts an element at the given position in the vector. All elements

View file

@ -307,7 +307,7 @@ void terminate_bro()
zeek::event_mgr.Drain(); zeek::event_mgr.Drain();
notifier::registry.Terminate(); zeek::notifier::detail::registry.Terminate();
zeek::log_mgr->Terminate(); zeek::log_mgr->Terminate();
zeek::input_mgr->Terminate(); zeek::input_mgr->Terminate();
zeek::thread_mgr->Terminate(); zeek::thread_mgr->Terminate();