In tpm20_read(), do not stop the callout that implements the
timeout on reading the result buffer. If the first thread
which tries to read is not the thread which did the write,
then the callout would be stopped, and then if thread that
did do the write never does a read, then all future writes
to the tpm device will hang forever. We have seen this happen
with a go application which uses multiple threads, and when
the read from the thread that did not do the write fails,
we suspect that the whole process exits, which prevents the
thread that did do the write from ever trying to read.
Leaving the callout running limits the total time to read
the entire result buffer, preventing errant read attempts
from blocking future writes indefinitely.
Sponsored by: Netflix