Skip to content

Commit f1cc116

Browse files
committed
libfoundation: Always retain (and release) the __MCValue.typeinfo.
1 parent 7bcf95e commit f1cc116

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

libfoundation/src/foundation-record.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,8 @@ MCRecordCopyAsBaseTypeAndRelease(MCRecordRef self,
283283
* make it immutable */
284284
if (self -> references == 1)
285285
{
286-
self -> typeinfo = p_base_typeinfo;
286+
MCValueRelease(self -> typeinfo);
287+
self -> typeinfo = MCValueRetain(p_base_typeinfo);
287288
self -> flags &= ~kMCRecordFlagIsMutable;
288289
r_new_record = self;
289290
return true;
@@ -336,7 +337,8 @@ MCRecordCopyAsDerivedTypeAndRelease(MCRecordRef self,
336337
self -> fields[i] = MCValueRetain(kMCNull);
337338

338339
/* Set the typeinfo and make immutable */
339-
self -> typeinfo = p_derived_typeinfo;
340+
MCValueRelease(self -> typeinfo);
341+
self -> typeinfo = MCValueRetain(p_derived_typeinfo);
340342
self -> flags &= ~kMCRecordFlagIsMutable;
341343

342344
r_new_record = self;
@@ -428,6 +430,7 @@ void __MCRecordDestroy(__MCRecord *self)
428430

429431
for(uindex_t i = 0; i < __count_fields(t_resolved_typeinfo); i++)
430432
MCValueRelease(self -> fields[i]);
433+
MCValueRelease(self -> typeinfo);
431434
MCMemoryDelete(self -> fields);
432435
}
433436

0 commit comments

Comments
 (0)