BTW, is lldb/test/dotest.py here to stay? I thought it was there just to
avoid breaking anybody who runs dotest directly (instead of ninja
check-lldb), and therefore we will remove it once everybody gets a chance
to migrate (I have already changed our buildbots to not use it).

Is that correct or I am misunderstanding something?

pl


On 2 November 2015 at 11:11, Zachary Turner via lldb-commits <
lldb-commits@lists.llvm.org> wrote:

> I looked into this some more, and unfortunately I can't reproduce it.
> That being said, I'm not convinced this patch fixes anything.  The reason
> is that when you import something, whether it be through the `__import__`
> function or the `import` statement, the module itself is cached in
> `sys.modules`.  Whether the *name* for that module is introduced globally
> (as is done in this patch) or locally (as is done when you use an `import`
> statement) is irrelevant.  Because the next time someone else imports it,
> it will still find the same instance of the module in `sys.modules` and
> just create a new name.  It won't import it anew.
>
> If this patch does actually fix something, I think it must be a
> coincidence.  That said, I do have an idea as to what the problem might
> be.  Or at the very least, I know of a problem that would definitely lead
> to strange behavior.
>
> `lldbsuite` is now a package, and it relies on the code in its
> `__init__.py` being run.  If you run
> `packages/python/lldbsuite/test/dotest.py` manually, then `__init__.py`
> doesn't get run, and `lldbExec` doesn't get initialized properly.
>
> Of course, this isn't what you're doing, but it *is* what `dosep` does
> internally.  `dosep` manually constructs a path to 
> `packages/python/lldbsuite/test/dotest.py`
> and execs it.  I have a patch that fixes this and makes `dosep` exec
> `lldb/test/dotest.py` instead, which will then lead to the package being
> imported, and `__init__.py` being run, and everything being initialized
> properly.
>
> I'm going to commit that patch by itself, and then I will submit a
> followup patch that reverts the change from this patch (since I can't
> reproduce this problem, I can't check whether or not my patch fixes it).
> So if my revert breaks you again, feel free to revert the revert.  Although
> if there's any way you can investigate a bit to understand what's going on
> a little bit more, but I would be very grateful.  In particular, I wonder
> about the following things:
>
> 1) When lldbExec is not initialized properly, is this in the same process
> instance that you ran from the command line, or is it in the
> multiprocessing fork?
> 2) If you add code to `lldbsuite/__init__.py` to print the process id and
> the value of `lldb_root`, and then add code in `dotest.py` to print the
> process id and the value of lldbExec, what does the output look like?
>  (Each line should be printed up to twice, due to the multiprocessing fork).
>
> Anyway, I'll get those 2 patches submitted to fix the dosep issue and
> revert this change, and see what happens.
>
> On Fri, Oct 30, 2015 at 1:53 PM Jim Ingham <jing...@apple.com> wrote:
>
>> Note, the other important step was that you had to have an lldb installed
>> in /usr/bin/lldb that FAILED this test.  If you have a more recent lldb
>> there, the test will succeed, and you won't notice you aren't testing your
>> newly built sources.
>>
>> Jim
>>
>> > On Oct 30, 2015, at 1:25 PM, Enrico Granata via lldb-commits <
>> lldb-commits@lists.llvm.org> wrote:
>> >
>> > I think what I was doing is be in lldb/test and do
>> >
>> > $ ./dotest.py ../packages/python/lldbsuite/functionalities/completion
>> >
>> >> On Oct 30, 2015, at 12:22 PM, Zachary Turner <ztur...@google.com>
>> wrote:
>> >>
>> >> Can you give me a command line which will reproduce the original
>> problem?  Because I ran through the entire test suite and nothing failed,
>> so I want to make sure we're doing the same thing.  I'm still a little
>> confused about how this happens, but I plan to look into it when I'm back
>> on Monday and see if I can understand it better to identify a better fix.
>> >>
>> >> On Fri, Oct 30, 2015 at 11:58 AM Enrico Granata <egran...@apple.com>
>> wrote:
>> >>> On Oct 29, 2015, at 11:31 PM, Zachary Turner <ztur...@google.com>
>> wrote:
>> >>>
>> >>> Wow.  That's a weird problem.  Thanks for finding it!
>> >>>
>> >>> Would it work if we move the definition of the `lldbtest_config`
>> class into lldbsuite/test/__init__.py?  This way the configuration should
>> be part of the global package state of the lldbsuite.test package, which
>> all the tests are already members of the same package, so they wouldn't
>> even need to import anything (I think).
>> >>>
>> >>
>> >> I think the problem is exactly that we want lldbtest_config to be
>> *global* state and not package local state.
>> >> Honestly, I think if we are not content with the fix as it stands, the
>> right way would be to change the way unittest2 imports test cases as to use
>> the package-level global scope instead of the global global state as it is
>> now.
>> >>
>> >>> On Oct 30, 2015, at 8:32 AM, Zachary Turner <ztur...@google.com>
>> wrote:
>> >>>
>> >>> I'm also still a little confused why this worked before my patch.
>> How is unittest2 importing the individual tests in a way that behaves
>> differently when dotest is a package (now) versus a standalone script
>> (before)?
>> >>>
>> >>
>> >> That is a good question. One to which “because Python” is the only
>> answer I can think of. I suspect scripts live at the global scope anyway,
>> so we were just getting lucky with those imports making it through
>> correctly.
>> >>
>> >>> On Thu, Oct 29, 2015 at 6:12 PM Enrico Granata via lldb-commits <
>> lldb-commits@lists.llvm.org> wrote:
>> >>> Author: enrico
>> >>> Date: Thu Oct 29 20:09:54 2015
>> >>> New Revision: 251678
>> >>>
>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=251678&view=rev
>> >>> Log:
>> >>> Some test cases that need the lldbExec path were failing because
>> lldbExec was turning out to be None even though it was being validly set by
>> dotest.py
>> >>>
>> >>> It turns out that lldbtest_config was being imported locally to
>> "lldbsuite.test" instead of globally, so when the test cases got
>> individually brought by a global import via __import__ by unittest2, they
>> did not see the lldbtest_config import, and ended up importing a new
>> separate copy of it, with lldbExec unset
>> >>>
>> >>> This is a simple hackaround that brings lldbtest_config to global
>> visibility and makes sure the configuration data is correctly shared
>> >>>
>> >>>
>> >>> Modified:
>> >>>     lldb/trunk/packages/Python/lldbsuite/test/dotest.py
>> >>>
>> >>> Modified: lldb/trunk/packages/Python/lldbsuite/test/dotest.py
>> >>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/dotest.py?rev=251678&r1=251677&r2=251678&view=diff
>> >>>
>> ==============================================================================
>> >>> --- lldb/trunk/packages/Python/lldbsuite/test/dotest.py (original)
>> >>> +++ lldb/trunk/packages/Python/lldbsuite/test/dotest.py Thu Oct 29
>> 20:09:54 2015
>> >>> @@ -21,6 +21,10 @@ for available options.
>> >>>  """
>> >>>
>> >>>  from __future__ import print_function
>> >>> +# this module needs to have global visibility, otherwise test cases
>> >>> +# will import it anew in their local namespace, essentially losing
>> access
>> >>> +# to all the configuration data
>> >>> +globals()['lldbtest_config'] = __import__('lldbtest_config')
>> >>>
>> >>>  import use_lldb_suite
>> >>>
>> >>> @@ -42,7 +46,6 @@ import test_results
>> >>>  from test_results import EventBuilder
>> >>>  import inspect
>> >>>  import unittest2
>> >>> -import lldbtest_config
>> >>>  import test_categories
>> >>>
>> >>>  import six
>> >>>
>> >>>
>> >>> _______________________________________________
>> >>> lldb-commits mailing list
>> >>> lldb-commits@lists.llvm.org
>> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>> >>
>> >>
>> >> Thanks,
>> >> - Enrico
>> >> 📩 egranata@.com ☎️ 27683
>> >>
>> >
>> >
>> > Thanks,
>> > - Enrico
>> > 📩 egranata@.com ☎️ 27683
>> >
>> > _______________________________________________
>> > lldb-commits mailing list
>> > lldb-commits@lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>>
>>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>
>
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to