We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
When closing OffsetManager, it can hang waiting for state to become "clean".
The Close method uses AsyncClose internally. At L360, AsyncClose waits for a message on the clean chan before closing the dying chan:
clean
dying
pom.lock.Lock() dirty := pom.dirty pom.lock.Unlock() if dirty { <-pom.clean } close(pom.dying)
However, updateCommitted can execute between AsyncClose()'s pom.lock.Unlock() and receive on the clean chan:
updateCommitted
AsyncClose()
pom.lock.Unlock()
pom.lock.Lock() defer pom.lock.Unlock() ... select { case pom.clean <- none{}: default: }
The Close() method drains pom.errors at L371. This channel does not close until pom.dying is closed, which is selected in the mainLoop at L215
Close()
pom.errors
pom.dying
The text was updated successfully, but these errors were encountered:
Successfully merging a pull request may close this issue.
When closing OffsetManager, it can hang waiting for state to become "clean".
The Close method uses AsyncClose internally. At L360, AsyncClose waits for a message on the
clean
chan before closing thedying
chan:However,
updateCommitted
can execute betweenAsyncClose()
'spom.lock.Unlock()
and receive on theclean
chan:The
Close()
method drainspom.errors
at L371. This channel does not close untilpom.dying
is closed, which is selected in the mainLoop at L215The text was updated successfully, but these errors were encountered: