diff -r 2a1de922651a Lib/pickle.py --- a/Lib/pickle.py Mon Nov 25 13:25:12 2013 -0800 +++ b/Lib/pickle.py Mon Nov 25 23:53:45 2013 +0200 @@ -192,16 +192,18 @@ self.current_frame = io.BytesIO() def end_framing(self): - if self.current_frame and self.current_frame.tell() > 0: - self.commit_frame(force=True) + if self.current_frame: + self.commit_frame(final=True) self.current_frame = None - def commit_frame(self, force=False): + def commit_frame(self, final=False): if self.current_frame: f = self.current_frame - if f.tell() >= self._FRAME_SIZE_TARGET or force: + if f.tell() >= self._FRAME_SIZE_TARGET or final: with f.getbuffer() as data: n = len(data) + if not final: + n += 9 # next frame header write = self.file_write write(FRAME) write(pack("framing || self->frame_start == -1) return 0; frame_len = self->output_len - self->frame_start - FRAME_HEADER_SIZE; + if (!final) + frame_len += FRAME_HEADER_SIZE; /* next frame header */ qdata = PyBytes_AS_STRING(self->output_buffer) + self->frame_start; _Pickler_WriteFrameHeader(self, qdata, frame_len); self->frame_start = -1; @@ -753,7 +755,7 @@ return 0; frame_len = self->output_len - self->frame_start - FRAME_HEADER_SIZE; if (frame_len >= FRAME_SIZE_TARGET) - return _Pickler_CommitFrame(self); + return _Pickler_CommitFrame(self, 0); else return 0; } @@ -765,7 +767,7 @@ assert(self->output_buffer != NULL); - if (_Pickler_CommitFrame(self)) + if (_Pickler_CommitFrame(self, 1)) return NULL; self->output_buffer = NULL;