This repository was archived by the owner on Feb 22, 2020. It is now read-only.
Fix spurious 'Socket receive buffer full' errors - #61
Open
jamadden wants to merge 5 commits into
Open
Conversation
Replaces PyObject_Malloc/Free with their PyMem counterparts; PyPy does not support the PyObject variants. Arguably, based on https://docs.python.org/2.3/whatsnew/section-pymalloc.html the PyMem variants are a better fit for this use case anyway (PyObject_ being intended for "small" allocations). Disables the use of CP1250 under PyPy because it lacks the PyUnicode_Encode function. There are no new tests failures. (testConnectWithWrongDB fails with a 1044 error for me and not 1049 with both the original code under CPython and this code under PyPy).
If we are reading many packets of different sizes from a fast database server, it's possible that the skip() method of the packet reader will never find the start and end pointers aligned and so it will never reset them. This can lead to throwing 'Socket receive buffer full' errors when we reach the end, even if there's plenty of unused space at the start of the buffer from previous packets. This checks for this situation and moves the live data and current pointers to the start of the buffer, thus making room (if possible).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
(This may be related to #34.)
In some cases, it was possible for the buffer to be reported as full when in fact it wasn't; it had lots of space at the beginning of the buffer, but the write cursor reached the end. The
skipmethod never detected the read and write pointers aligning and so never reset the buffer. This would happen when reading a large result set from the server very quickly; I suspect its occurrence depends on factors like network connection bandwidth and latency as well as the net_buffer_length of the server.This builds on my previous PR.