Fix goroutine deadlock from unlocked mutex during panic - #3064
Conversation
|
|
SummaryCoverage spans type conversion and output formatting across normal flows, cache reuse and refresh, concurrent callers, retries after errors, and recovery from panics. It also exercises edge cases involving special, composite, array, modified, serialized, and unknown values, with overall behavior appearing healthy aside from one stale-output edge case. Safe to merge — the only failure is a medium-severity, unrelated pre-existing cache issue and is not attributable to this PR; no PR regressions or newly introduced failures were identified. It is a flag for later rather than a merge blocker. Tests run by ItoAdditional Findings DetailsThese findings are unrelated to the current changes but were observed during testing. 🟡 Retry reuses stale output function
Evidence PackageTip Reply with @itoqa to send us feedback on this test run. |
|
e44c548 to
8d53ac2
Compare
Commit: SummaryCoverage spans normal and mixed-type value conversion, repeated and concurrent operations, session isolation, consistent array and composite value formatting, recovery after malformed inputs, and formatter replacement behavior. It also exercises adversarial error and timeout handling, including distinguishing real deadlocks from ordinary failures and incomplete diagnostic conditions. Safe to merge — the run found no PR-attributable regressions or new failures across the covered conversion, output, recovery, concurrency, and timeout-handling behaviors. The formatter-replacement scenario could not be fully rerun because its local target stopped, but source review supports the expected cache-reset behavior and this is a flag for later rather than a merge blocker. Tests run by Ito
Tip Reply with @itoqa to send us feedback on this test run. |

Fixes a deadlock in DoltgresType.IoOutput/ConvertToType where a panic while resolving a type's cast or output function (e.g. an index-out-of-range on an unexpected empty ResolvedTypes()) left the type's mutex locked
forever, hanging every later query that touched the same type.
Also adds a step in the CI workflow to check for signs of a timeout in the logs, and if so, errors with a message about a deadlock timeout.