Issue #7640: In the new io module, fix relative seek() for buffered

readable streams when the internal buffer isn't empty.  Patch by Pascal
Chambon.
This commit is contained in:
Antoine Pitrou 2010-05-15 20:33:07 +00:00
parent 6f1cfc1c12
commit c400610321
3 changed files with 24 additions and 1 deletions

View file

@ -1199,6 +1199,10 @@ class BufferedRandom(BufferedWriter, BufferedReader):
self.flush()
# First do the raw seek, then empty the read buffer, so that
# if the raw seek fails, we don't lose buffered data forever.
if self._read_buf and whence == 1:
# Undo read ahead.
with self._read_lock:
self.raw.seek(self._read_pos - len(self._read_buf), 1)
pos = self.raw.seek(pos, whence)
with self._read_lock:
self._reset_read_buf()