As I understood both of them are legal (in theory) but in practice I faced with IOError. I think we should ignore IOError because we can't fix isalive() method.
Thanks, Ilia On 30 Dec 2014 19:21, "Abid, Hafiz" <[email protected]> wrote: > 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]> 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
