> On Sep 20, 2017, at 4:16 PM, Leonard Mosescu <mose...@google.com> wrote:
> 
> I don't quite understand the comment about signals adding indeterminacy. No 
> signal delivery is required to test this part.  The lldb driver has a sigint 
> handler that calls SBDebugger::DispatchInputInterrupt.  But since you aren't 
> testing whether SIGINT actually calls DispatchInputInterrupt, you can just 
> call it directly.  
> 
> Agreed.
> 
> I was suggesting executing a command (with 
> SBCommandInterpreter::ExecuteCommand) for a Python command that cycles 
> calling WasInterrupted.  Then you would make another thread in Python and 
> have that thread wait a bit then call DispatchInputInterrupt,  If "wait a 
> bit" bothers you then you could have the python based command you are 
> interrupting signal the interrupting thread before going into its loop.  I 
> don't see how this would result in indeterminacy,  And it would be testing 
> exactly what you want to  test: does calling DispatchInputInterrupt cause a 
> command in flight to be interrupted.
> 
> Once you have a second thread you end up with the non-determinism I hinted to 
> (this is true regardless if you hardcode a wait, use an event or keep 
> interrupting at a fixed rate). Now this is not a deal breaker in itself, 
> after all if you go after testing async behavior it's part of the deal.
> 
> But in this case it gets a bit more complicated as far as I can tell: first, 
> DispatchInputInterrupt() is only passed on the top IO Handler, if any. So 
> DispatchInputInterrupt() through SBDebugger is not exactly the same as a real 
> input interrupt.
> 
> Second, if we want to allow the interruption of commands that are executed 
> through SBDebugger::HandleCommand() the command state machine is not a simple 
> idle -> executing (->interrupted) -> idle since you get reentrancy (the 
> command can invoke other commands, etc...). Note that in the current version, 
> the states are only tracking in CommandInterpreter::IOHandlerInputComplete() 
> which should not lead to reentrancy (I did manual testing for this - if 
> anything I'd love a way to automate testing _this_ part btw)
> 
> I got pretty far in dancing around all this, but it become clear that I was 
> not really testing the real path and I was just introducing more artificial 
> complexity. If I'm missing anything I'd be happy to be revisit this and to be 
> proven wrong.

It been a couple of years since I dug into this code - Greg’s mostly been 
maintaining it.  So I’m entirely willing to believe it’s changed in a way that 
makes my memory of how it works unhelpful, but I’ll have to do some reading up 
to see.  I’ll do that when I get a chance.

Jim

> 
> On Wed, Sep 20, 2017 at 3:51 PM, Jim Ingham via Phabricator 
> <revi...@reviews.llvm.org <mailto:revi...@reviews.llvm.org>> wrote:
> jingham accepted this revision.
> jingham added a comment.
> 
> I don't quite understand the comment about signals adding indeterminacy. No 
> signal delivery is required to test this part.  The lldb driver has a sigint 
> handler that calls SBDebugger::DispatchInputInterrupt.  But since you aren't 
> testing whether SIGINT actually calls DispatchInputInterrupt, you can just 
> call it directly.  I was suggesting executing a command (with 
> SBCommandInterpreter::ExecuteCommand) for a Python command that cycles 
> calling WasInterrupted.  Then you would make another thread in Python and 
> have that thread wait a bit then call DispatchInputInterrupt,  If "wait a 
> bit" bothers you then you could have the python based command you are 
> interrupting signal the interrupting thread before going into its loop.  I 
> don't see how this would result in indeterminacy,  And it would be testing 
> exactly what you want to  test: does calling DispatchInputInterrupt cause a 
> command in flight to be interrupted.
> 
> But this change is fine.  Check it in and I'll add a test when I get a chance.
> 
> 
> https://reviews.llvm.org/D37923 <https://reviews.llvm.org/D37923>
> 
> 
> 
> 

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to