diff --git a/src/Type.cc b/src/Type.cc index b840fa98e3..00b3a5fd7b 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -1691,7 +1691,7 @@ void VectorType::Describe(ODesc* d) const yield_type->Describe(d); } -BroType* base_type(TypeTag tag) +BroType* base_type_no_ref(TypeTag tag) { static BroType* base_types[NUM_TYPES]; @@ -1707,7 +1707,7 @@ BroType* base_type(TypeTag tag) base_types[t]->SetLocationInfo(&l); } - return base_types[t]->Ref(); + return base_types[t]; } diff --git a/src/Type.h b/src/Type.h index 167e7921ac..f16ed97760 100644 --- a/src/Type.h +++ b/src/Type.h @@ -613,7 +613,13 @@ extern OpaqueType* bloomfilter_type; extern OpaqueType* x509_opaque_type; // Returns the BRO basic (non-parameterized) type with the given type. -extern BroType* base_type(TypeTag tag); +// The reference count of the type is not increased. +BroType* base_type_no_ref(TypeTag tag); + +// Returns the BRO basic (non-parameterized) type with the given type. +// The caller assumes responsibility for a reference to the type. +inline BroType* base_type(TypeTag tag) + { return base_type_no_ref(tag)->Ref(); } // Returns the BRO basic error type. inline BroType* error_type() { return base_type(TYPE_ERROR); } diff --git a/src/Val.cc b/src/Val.cc index fb7a1ce4ba..5f605a178e 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -1152,7 +1152,7 @@ bool PatternVal::DoUnserialize(UnserialInfo* info) } ListVal::ListVal(TypeTag t) -: Val(new TypeList(t == TYPE_ANY ? 0 : base_type(t))) +: Val(new TypeList(t == TYPE_ANY ? 0 : base_type_no_ref(t))) { tag = t; }