| Submitter | Richard Purdie |
|---|---|
| Date | Dec. 7, 2012, 1:10 p.m. |
| Message ID | <1354885851.12928.25.camel@ted> |
| Download | mbox | patch |
| Permalink | /patch/40647/ |
| State | New |
| Headers | show |
Comments
On Fri, 2012-12-07 at 13:10 +0000, Richard Purdie wrote: > The classes variable in particular could be in an odd state if parsing of a > previous recipe had abruptly ended. > > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> > --- > diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py > index 2e0647b..c4e579d 100644 > --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py > +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py > @@ -107,14 +107,15 @@ def get_statements(filename, absolute_filename, base_name): > return statements > > def handle(fn, d, include): > - global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __infunc__, __body__, __residue__ > + global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __infunc__, __body__, __residue__, __inpython__, classes > __body__ = [] > __infunc__ = "" > __classname__ = "" > __residue__ = [] > - > + __inpython__ = False > > if include == 0: > + classes = [ None, ] > logger.debug(2, "BB %s: handle(data)", fn) > else: > logger.debug(2, "BB %s: handle(data, include)", fn) This patch doesn't work. To cut a long story short, "classes" is getting cached inside the ast statement cache and shouldn't be. This is likely the source of the problems. Trying to fix that leads to a voyage of discovery of other breakage :( Its likely going to end up with the EXPORT_FUNCTION implementation needing rewriting, or at least how/where its getting its class lists from. Cheers, Richard
Patch
diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index 2e0647b..c4e579d 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py @@ -107,14 +107,15 @@ def get_statements(filename, absolute_filename, base_name): return statements def handle(fn, d, include): - global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __infunc__, __body__, __residue__ + global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __infunc__, __body__, __residue__, __inpython__, classes __body__ = [] __infunc__ = "" __classname__ = "" __residue__ = [] - + __inpython__ = False if include == 0: + classes = [ None, ] logger.debug(2, "BB %s: handle(data)", fn) else: logger.debug(2, "BB %s: handle(data, include)", fn)
The classes variable in particular could be in an odd state if parsing of a previous recipe had abruptly ended. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> ---