vmprof / vmprof-python

vmprof - a statistical program profiler
http://vmprof.com
Other
433 stars 54 forks source link

Flush buffers before reading back in to construct all seen addresses #206

Open timpalpant opened 5 years ago

timpalpant commented 5 years ago

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.