Packets: Fix global registry destruction segfault
[senf.git] / senf / Packets / PacketRegistry.cti
index b70af2a..44ee816 100644 (file)
@@ -66,13 +66,15 @@ template <class Tag>
 template <class PacketType>
 prefix_ void senf::PacketRegistry<Tag>::unregisterPacket()
 {
-    registry().unregisterPacket<PacketType>();
+    if (alive())
+        registry().unregisterPacket<PacketType>();
 }
 
 template <class Tag>
 prefix_ void senf::PacketRegistry<Tag>::unregisterPacket(typename Tag::key_t key, int priority)
 {
-    registry().unregisterPacket(key, priority);
+    if (alive())
+        registry().unregisterPacket(key, priority);
 }
 
 template <class Tag>
@@ -128,6 +130,18 @@ prefix_ typename senf::PacketRegistry<Tag>::iterator senf::PacketRegistry<Tag>::
     return registry().end();
 }
 
+template <class Tag>
+prefix_ senf::PacketRegistry<Tag>::PacketRegistry()
+    : registry_ (prettyName(typeid(Tag)))
+{}
+
+template <class Tag>
+prefix_ typename senf::PacketRegistry<Tag>::Registry &
+senf::PacketRegistry<Tag>::registry()
+{
+    return instance().registry_;
+}
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::detail::PacketRegistryImpl<KeyType>