This is an archive of the discontinued LLVM Phabricator instance.

[clangd] Fix not being able to attach a debugger on macOS
ClosedPublic

Authored by malaperle-ericsson on Mar 6 2017, 6:42 PM.

Details

Summary

Clangd is often waiting for input on getline as it awaits requests. If the getline is interrupted, it causes the system call (read) to fail and the EINTR error to be set. This can be seen when attaching a debugger such as LLDB on macOS. On macOS (and possibly other operating systems), this system call is not restarted after interruption but on Linux it is restarted which is why attaching a debugger does work correctly there.

The solution is to work around the non-restarting system call by checking the errno for EINTR when the stream fails and try again. This should be safe on all Unixish platforms.

See also http://bugs.llvm.org/show_bug.cgi?id=32149 for some background discussion.

Diff Detail

Repository
rL LLVM

Event Timeline

malaperle-ericsson set the repository for this revision to rL LLVM.Mar 6 2017, 6:44 PM
malaperle-ericsson added a subscriber: cfe-commits.
bkramer edited edge metadata.Mar 8 2017, 4:45 AM

Generally makes sense. Is there any reason for the #ifdef? Windows has errno and EINTR too.

Generally makes sense. Is there any reason for the #ifdef? Windows has errno and EINTR too.

I have no reasonable expectation that getline will produce a EINTR on Windows. But perhaps there's no harm in doing so? What is you preference?

bkramer accepted this revision.Mar 14 2017, 1:32 PM

lg, do you have commit access?

This revision is now accepted and ready to land.Mar 14 2017, 1:32 PM

lg, do you have commit access?

No I do not have commit access. Could you commit it? Thank you very much!

This revision was automatically updated to reflect the committed changes.