Thanks for quick reply. Your patch is removing the following line from lldb-mi
test case.
- child.sendline("quit")
I am wondering what is the convention of terminating the executable that we
invoked. Do the test is supposed to kill it (using 'quit') command or it can be
left to the other part of testing code which as you noted also use
sendline('quit').
Regards,
Abid
________________________________
From: Ilia K [[email protected]]
Sent: Tuesday, December 30, 2014 4:11 PM
To: Abid, Hafiz
Cc: [email protected]
Subject: Re: [Lldb-commits] [PATCH] test: ignore IOError in
Base.deletePexpectChild and clean TestMySyntax test
** 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
<[email protected]<mailto:[email protected]>> 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
<[email protected]<mailto:[email protected]>> 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 [[email protected]<mailto:[email protected]>]
Sent: Monday, December 22, 2014 11:54 AM
To: Abid, Hafiz; [email protected]<mailto:[email protected]>
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
<[email protected]<mailto:[email protected]>> 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
<[email protected]<mailto:[email protected]>> 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
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits