• Neil Schemenauer's avatar
    bpo-17852: Maintain a list of BufferedWriter objects. Flush them on exit. (#1908) · e38d12ed
    Neil Schemenauer authored
    * Maintain a list of BufferedWriter objects.  Flush them on exit.
    
    In Python 3, the buffer and the underlying file object are separate
    and so the order in which objects are finalized matters.  This is
    unlike Python 2 where the file and buffer were a single object and
    finalization was done for both at the same time.  In Python 3, if
    the file is finalized and closed before the buffer then the data in
    the buffer is lost.
    
    This change adds a doubly linked list of open file buffers.  An atexit
    hook ensures they are flushed before proceeding with interpreter
    shutdown.  This is addition does not remove the need to properly close
    files as there are other reasons why buffered data could get lost during
    finalization.
    
    Initial patch by Armin Rigo.
    
    * Use weakref.WeakSet instead of WeakKeyDictionary.
    
    * Simplify buffered double-linked list types.
    
    * In _flush_all_writers(), suppress errors from flush().
    
    * Remove NEWS entry, use blurb.
    e38d12ed
2017-09-04-12-46-25.bpo-17852.OxAtCg.rst 118 Bytes