diff --git a/src/OpaqueVal.cc b/src/OpaqueVal.cc index 703efba33b..e3e6d2a4fc 100644 --- a/src/OpaqueVal.cc +++ b/src/OpaqueVal.cc @@ -112,7 +112,7 @@ broker::expected OpaqueVal::SerializeType(BroType* t) return {broker::vector{false, static_cast(t->Tag())}}; } -BroType* OpaqueVal::UnserializeType(const broker::data& data) +IntrusivePtr OpaqueVal::UnserializeType(const broker::data& data) { auto v = caf::get_if(&data); if ( ! (v && v->size() == 2) ) @@ -135,14 +135,14 @@ BroType* OpaqueVal::UnserializeType(const broker::data& data) if ( ! id->IsType() ) return nullptr; - return id->GetType()->Ref(); + return id->GetType(); } auto tag = caf::get_if(&(*v)[1]); if ( ! tag ) return nullptr; - return base_type(static_cast(*tag))->Ref(); + return base_type(static_cast(*tag)); } IntrusivePtr OpaqueVal::DoClone(CloneState* state) @@ -854,8 +854,9 @@ bool BloomFilterVal::DoUnserialize(const broker::data& data) auto no_type = caf::get_if(&(*v)[0]); if ( ! no_type ) { - BroType* t = UnserializeType((*v)[0]); - if ( ! (t && Typify(t)) ) + auto t = UnserializeType((*v)[0]); + + if ( ! (t && Typify(t.get())) ) return false; } @@ -957,8 +958,9 @@ bool CardinalityVal::DoUnserialize(const broker::data& data) auto no_type = caf::get_if(&(*v)[0]); if ( ! no_type ) { - BroType* t = UnserializeType((*v)[0]); - if ( ! (t && Typify(t)) ) + auto t = UnserializeType((*v)[0]); + + if ( ! (t && Typify(t.get())) ) return false; } diff --git a/src/OpaqueVal.h b/src/OpaqueVal.h index 6071dbf951..153fc36ee0 100644 --- a/src/OpaqueVal.h +++ b/src/OpaqueVal.h @@ -154,7 +154,7 @@ protected: * Helper function for derived class that need to restore a type * during unserialization. Returns the type at reference count +1. */ - static BroType* UnserializeType(const broker::data& data); + static IntrusivePtr UnserializeType(const broker::data& data); }; namespace probabilistic { diff --git a/src/probabilistic/Topk.cc b/src/probabilistic/Topk.cc index 841fc771c8..137af7a50a 100644 --- a/src/probabilistic/Topk.cc +++ b/src/probabilistic/Topk.cc @@ -479,12 +479,12 @@ bool TopkVal::DoUnserialize(const broker::data& data) auto no_type = caf::get_if(&(*v)[3]); if ( ! no_type ) { - BroType* t = UnserializeType((*v)[3]); + auto t = UnserializeType((*v)[3]); + if ( ! t ) return false; - Typify(t); - Unref(t); + Typify(t.get()); } uint64_t i = 0;