Use os.pread or a lock in MODE_FILE #12
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
After a fork, the file handle of both the parent and child process will share the same file table entry, which holds state such as the offset. There is unfortunately no way to clone the file table entry (dup only duplicates the file descriptor). This leads to corrupted reads when another process changes the offset unexpectedly. In Python 3.x, we use
preadwhen available, as it does not rely on the offset in the file table. On Python's withoutpread, we rely on a lock. Reported in #22 on GeoIP2-python.