** 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]> 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]> > 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]] >> *Sent:* Monday, December 22, 2014 11:54 AM >> *To:* Abid, Hafiz; [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]> 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]> 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
