Because entryCache has been cleared, calling ToEntry() will write to entryCache.
If another goroutine tries read or write to entryCache at the same time, a panic can occur.
This would not happen if ClearEntryCache() is not called because entryCache would be fully populated after processing YANG modules and the cache can be safely read concurrently as no writes would occur.
The following panics occurred due to
entryCache
being cleared withClearEntryCache()
andToEntry()
being called concurrently.ClearEntryCache()
is called after processing YANG modules (added recently in https://github.com/openconfig/goyang/pull/260).https://github.com/openconfig/goyang/blob/5ad0d2feb9ce655fb39e414bd4e3696356780cdb/pkg/yang/modules.go#L448-L450
entryCache
is accessed inToEntry()
(by callingFind()
) concurrently.https://github.com/openconfig/goyang/blob/5ad0d2feb9ce655fb39e414bd4e3696356780cdb/pkg/yang/entry.go#L562-L567
entryCache
has been cleared, callingToEntry()
will write toentryCache
.entryCache
at the same time, a panic can occur.ClearEntryCache()
is not called becauseentryCache
would be fully populated after processing YANG modules and the cache can be safely read concurrently as no writes would occur.