-
Notifications
You must be signed in to change notification settings - Fork 30
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Prevent broken pipes leading to client errors #406
Conversation
@@ -172,6 +172,8 @@ def send_message(request, params = nil) | |||
json = message.to_json | |||
|
|||
@stdin.write("Content-Length: #{json.length}\r\n\r\n", json) | |||
rescue Errno::EPIPE | |||
# The server connection died |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we print something to stderr here? Otherwise it will seem like it's failing silently.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't do it because it will end up printing too much. Once the server died, every single attempt to communicate with it will fail and print to stderr.
Considering that we don't have information about what caused the server to crash, it will be spamming the user with no actionable steps to take.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel a simple message like "Ruby LSP Rails server crashed and didn't respond"
will still help debugging a bit as we'll be sure the chain broke at this exact point. But IMO not a blocker, can add it later if proven needed too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My hypothesis is that if the server crashed we will already have printed something. I'll ship as is and we can add the print if we find it difficult to debug without it.
@@ -172,6 +172,8 @@ def send_message(request, params = nil) | |||
json = message.to_json | |||
|
|||
@stdin.write("Content-Length: #{json.length}\r\n\r\n", json) | |||
rescue Errno::EPIPE | |||
# The server connection died |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel a simple message like "Ruby LSP Rails server crashed and didn't respond"
will still help debugging a bit as we'll be sure the chain broke at this exact point. But IMO not a blocker, can add it later if proven needed too.
If for any reason the server died and the pipes are broken, we cannot keep trying to write to STDIN or read from STDOUT because that will raise and halt the regular operation of the LSP.