Unit tests and bug fixes for XmlRpcpp #1214
Closed
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.
The initial motivation for this was to fix some rare crashes that we were seeing in xmlrpcpp where it would leak file descriptors (as described in https://answers.ros.org/question/250393/rosout-leaks-file-descriptors/ ) and then would crash if given a socket file descriptor with descriptor number above FD_SETSIZE (commonly 1024)
This also fixes #914, where an incoming XmlRpc request would cause the server to use 100% of a core if it could not successfully call
accept()
. (replaces #977, #960). There are two fallback mechanisms here:Measuring the number of open file descriptors and close new incoming connections if the number of free file descriptors falls below a threshold.
If accept fails completely, stop monitoring the server socket for 1 second and then re-add it, so that we can still accept new connections if the old connections eventually close.
cc @kmactavish @mikepurvis @mgrrx @ruffsl