fix: check field type via C++ schema in from_dict to avoid a reference cycle (#407)

from_dict called self.schema.fields for str values, which builds
_StructSchemaField wrappers that reference the schema, so every
message built via kwargs stayed alive until a GC pass. Follow-up to
#401, which only skipped the lookup for non-str values.
This commit is contained in:
Trey Moen
2026-09-21 17:26:44 -07:00
committed by GitHub
parent 8d80f4d69e
commit a0cb5cdf06
2 changed files with 4 additions and 4 deletions

View File

@@ -1879,9 +1879,8 @@ cdef class _DynamicStructBuilder:
for key, val in d.iteritems():
if key != 'which':
if isinstance(val, str):
field = self.schema.fields.get(key)
dtype = field.proto.slot.type.which()
if dtype == "data":
key_bytes = key.encode()
if self.thisptr.getSchema().getFieldByName(key_bytes).getType().isData():
# decode bytes from utf-8 base64 encoding
val = base64.b64decode(val)
try: