Log Message: |
AVRO-762. C: Recursive schema resolution
The avro_resolver_new function now works correctly with recursive
schemas. We had to memoize the results of avro_resolver_new, so that we
can detect when we've already created an avro_resolver_t instance for a
pair of schemas. This prevents us from going into an infinite loop
trying to resolve a recursive schema.
This memoization means that there might be multiple references to a
resolver within the graph of resolvers for a recursive schema type.
When freeing this graph of resolvers, we now have to take care to only
free each instance once. We do this by maintaining a set of the
resolvers that we've already encountered during the free operation, and
immediately returning if we try to start freeing a resolver object a
second time.
|