diff --git a/pysyncobj/journal.py b/pysyncobj/journal.py index 44d5bd7..f696ec7 100644 --- a/pysyncobj/journal.py +++ b/pysyncobj/journal.py @@ -90,17 +90,18 @@ def __init__(self, fileName, initialSize = 1024, resizeFactor = 2.0, defaultCont if currSize < initialSize: try: self.__mm.resize(initialSize) - except SystemError: + except (SystemError, OSError): self.__extand(initialSize - currSize) def write(self, offset, values): size = len(values) - currSize = self.__mm.size() - if offset + size > self.__mm.size(): + while offset + size > self.__mm.size(): + currSize = self.__mm.size() + newSize = max(int(currSize * self.__resizeFactor), offset + size) try: - self.__mm.resize(int(self.__mm.size() * self.__resizeFactor)) - except SystemError: - self.__extand(int(self.__mm.size() * self.__resizeFactor) - currSize) + self.__mm.resize(newSize) + except (SystemError, OSError): + self.__extand(newSize - currSize) self.__mm[offset:offset + size] = values def read(self, offset, size):