<html>
    <head>
      <base href="http://bugs.llvm.org/">
    </head>
    <body><span class="vcard"><a class="email" href="mailto:jingham@apple.com" title="Jim Ingham <jingham@apple.com>"> <span class="fn">Jim Ingham</span></a>
</span> changed
          <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED INVALID - Interrupting inferior during a getline causes the stream to fail"
   href="http://bugs.llvm.org/show_bug.cgi?id=32149">bug 32149</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">Resolution</td>
           <td>---
           </td>
           <td>INVALID
           </td>
         </tr>

         <tr>
           <td style="text-align:right;">Status</td>
           <td>NEW
           </td>
           <td>RESOLVED
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED INVALID - Interrupting inferior during a getline causes the stream to fail"
   href="http://bugs.llvm.org/show_bug.cgi?id=32149#c3">Comment # 3</a>
              on <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED INVALID - Interrupting inferior during a getline causes the stream to fail"
   href="http://bugs.llvm.org/show_bug.cgi?id=32149">bug 32149</a>
              from <span class="vcard"><a class="email" href="mailto:jingham@apple.com" title="Jim Ingham <jingham@apple.com>"> <span class="fn">Jim Ingham</span></a>
</span></b>
        <pre>Looks like getline uses LibC's getc on macOS.  All of the getc family can get
EINTR if something interrupts this read call.  

That attaching with a debugger interrupts an ongoing system call most likely
varies from system to system.  But it does happen on macOS, and isn't something
the debugger can control.

It looks like getline doesn't handle EINTR itself.  It also sets both bad and
eof to true on EINTR on OSX.  But I don't think you can rely on that because if
I close the input by sending ^D I get the same result.

Something like this works, but it's a little ugly:

#include <iostream>
#include <string>
#include <stdio.h>

int main() {
  errno = 0;
  while (errno == EINTR || !std::cin.eof()) {
    std::string Line;
    errno = 0;
    std::cin.clear();
    std::getline(std::cin, Line);
  }
  return 0;
}

Anyway, this isn't an issue with lldb.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>