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

Ilia K ki.stfu at gmail.com
Tue Dec 30 08:11:16 PST 2014


** it will cause a IOError because later it will try to kill process using
'sendline(quit)'.

Thanks,
Ilia

On Tue, Dec 30, 2014 at 7:06 PM, Ilia K <ki.stfu at gmail.com> wrote:

> 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/05ba3e94/attachment.html>


More information about the lldb-commits mailing list