Fix a reference counting bug in ListVal ctor.

This commit is contained in:
Jon Siwek 2014-06-25 10:44:57 -05:00
parent f7c2c00045
commit bfaa082aee
3 changed files with 10 additions and 4 deletions

View file

@ -1691,7 +1691,7 @@ void VectorType::Describe(ODesc* d) const
yield_type->Describe(d); yield_type->Describe(d);
} }
BroType* base_type(TypeTag tag) BroType* base_type_no_ref(TypeTag tag)
{ {
static BroType* base_types[NUM_TYPES]; static BroType* base_types[NUM_TYPES];
@ -1707,7 +1707,7 @@ BroType* base_type(TypeTag tag)
base_types[t]->SetLocationInfo(&l); base_types[t]->SetLocationInfo(&l);
} }
return base_types[t]->Ref(); return base_types[t];
} }

View file

@ -613,7 +613,13 @@ extern OpaqueType* bloomfilter_type;
extern OpaqueType* x509_opaque_type; extern OpaqueType* x509_opaque_type;
// Returns the BRO basic (non-parameterized) type with the given 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. // Returns the BRO basic error type.
inline BroType* error_type() { return base_type(TYPE_ERROR); } inline BroType* error_type() { return base_type(TYPE_ERROR); }

View file

@ -1152,7 +1152,7 @@ bool PatternVal::DoUnserialize(UnserialInfo* info)
} }
ListVal::ListVal(TypeTag t) 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; tag = t;
} }