Flush buffers before reading back in to construct all seen addresses
When disabling profiling, the log of samples written is read back in by LogReaderDumpNative to construct a deduplicated set of all code addresses that were recorded during sampling. This set is then passed to _vmprof.write_all_code_objects to write out the address and file/symbol info.
However if the last call to commit_buffer is a short write (for example because it was interrupted by a signal), then the LogReader may not be able to parse the tail of the file because we may still have pending un-flushed buffers (see: _write_single_ready_buffer).
This change adds a function to ensure all pending buffers are flushed to disk before attempting to reread them with the LogReader.
Could you add a test that hits the new code?