[Lldb-commits] [PATCH] test: ignore IOError in Base.deletePexpectChild and clean TestMySyntax test

Ilia K ki.stfu at gmail.com
Tue Dec 30 08:06:58 PST 2014


Hello Abid,

I'm glad to see you.

>RE: IMHO once we have removed the extra quit call from the test cases, we
will not need the check for OSErrror.
Unfortunately it's not. The deletePexpectChild() sometimes causes that
problem when isalive returns a false positive result.
{code}
        # This is for the case of directly spawning 'lldb' and interacting
with it
        # using pexpect.
        if self.child and self.child.isalive(): *<--here*
            import pexpect
            with recording(self, traceAlways) as sbuf:
                print >> sbuf, "tearing down the child process...."
            try:
                if self.child_in_script_interpreter:
                    self.child.sendline('quit()')
                    self.child.expect_exact(self.child_prompt)
                self.child.sendline('settings set
interpreter.prompt-on-quit false')
                self.child.sendline('quit')
                self.child.expect(pexpect.EOF)
            except (ValueError, OSError, pexpect.ExceptionPexpect):
                # child is already terminated
                pass
            finally:
                # Give it one final blow to make sure the child is
terminated.
                self.child.close()
{code}
The pexpect's isalive() method is nonblocking. It checks whether process
was terminated or not. But the problem is that process may be terminated
after isalive() was called -- it will cause a IOError.

Thanks,
Ilia


On Tue, Dec 30, 2014 at 6:46 PM, Abid, Hafiz <Hafiz_Abid at mentor.com> wrote:

>  I dont see any problem with the patch that cleans up
> the TestMiSyntax.py. But I see that similar cleanup is needed in  other
> tests too. I will make the change and then commit all of them.
>
>  IMHO once we have removed the extra quit call from the test cases, we
> will not need the check for OSErrror.
>
>  Thanks,
> Abid
>  ------------------------------
> *From:* Ilia K [ki.stfu at gmail.com]
> *Sent:* Monday, December 22, 2014 11:54 AM
> *To:* Abid, Hafiz; lldb-commits at cs.uiuc.edu
> *Subject:* Re: [Lldb-commits] [PATCH] test: ignore IOError in
> Base.deletePexpectChild and clean TestMySyntax test
>
>   Hello,
>
>  My previous messages left without answer. I'm posting them again (see
> below) with patch files.
> The initial message:
> http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20141215/014599.html
>
>  Thanks,
> Ilia
>
> On Tue, Dec 16, 2014 at 7:02 PM, Ilia K <ki.stfu at gmail.com> wrote:
>
>> Hello,
>>
>>  >RE: IOError may happen when child already exited but dotest has missed
>> this and tries to exit using 'child.sendline("quit")'
>> Actually it's OSError (not IOError):
>>
>>  ======================================================================
>> ERROR: test_lldbmi_tokens (TestMiSyntax.MiSyntaxTestCase)
>>    Test that 'lldb-mi --interpreter' echos command tokens.
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>>   File "/Users/IliaK/p/llvm_delphi/tools/lldb/test/lldbtest.py", line
>> 1770, in tearDown
>>     Base.tearDown(self)
>>   File "/Users/IliaK/p/llvm_delphi/tools/lldb/test/lldbtest.py", line
>> 1092, in tearDown
>>     self.deletePexpectChild()
>>   File "/Users/IliaK/p/llvm_delphi/tools/lldb/test/lldbtest.py", line
>> 1074, in deletePexpectChild
>>     self.child.sendline('settings set interpreter.prompt-on-quit false')
>>   File
>> "/Users/IliaK/p/llvm_delphi/tools/lldb/test/pexpect-2.4/pexpect.py", line
>> 966, in sendline
>>     n = self.send(s)
>>   File
>> "/Users/IliaK/p/llvm_delphi/tools/lldb/test/pexpect-2.4/pexpect.py", line
>> 958, in send
>>     c = os.write(self.child_fd, s)
>> OSError: [Errno 5] Input/output error
>> Config=x86_64-clang
>>
>>  Therefore I updated lldbtest_ignore_ioerror_on_theardown.patch file.
>> Btw, may be better to filter only IO errors from OSError class? It'll
>> look like:
>>
>>  {code}
>> try:
>>     ...
>> except (ValueError, pexpect.ExceptionPexpect):
>>     # child is already terminated
>>     pass
>> except OSError, e:
>>     if e.errno != errno.EIO:
>>         # unexpected exception
>>         raise
>>      # child is already terminated
>>      pass
>> finally:
>>     ...
>> {code}
>>
>>  Thanks,
>> Ilia
>>
>>
>> On Tue, Dec 16, 2014 at 4:42 PM, Ilia K <ki.stfu at gmail.com> wrote:
>>>
>>> Hello,
>>>
>>>  I found the following:
>>> IOError may happen when child already exited but dotest has missed this
>>> and tries to exit using 'child.sendline("quit")'
>>>
>>>  Also, I clean syntax test. -exec-run no hangs more and 'quit' isn't
>>> needed at exit.
>>>
>>>  Thanks,
>>> Ilia
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20141230/efbfe18a/attachment.html>


More information about the lldb-commits mailing list