I'm in the process of upgrading my project to boost-1.45.0 and
python3, and I started seeing strange problems with some of my
boost.python-based extension modules. Essentially, some of my modules
are reporting the wrong module name, i.e. if I
"print(module_object.__name__)", I get the wrong value. I threw this
into gdb, and it looks like the problem might have to do with the
implementation of bp::detail::init_module().

I ran python under gdb, but a breakpoint on init_module(), and
imported the modules with which I'm seeing problems. The first call to
init_module() initializes the static PyModuleDef struct "moduledef"
properly. However, the second call shows that the "m_name" field it
left as-is from the first call (since the object is static); I would
have expected that it needs to be updated with the new module name.
This stale (I think) module def is then used for the rest of the
initialization, and I'm guessing that this is the cause of the
problems I'm seeing. Certainly, it seems that the name of the first
module imported seems to be getting used as the name of the second
module.

I only noticed this problem when I tried to pickle some of the types
exposed by my module. The pickle module in python3 complained that it
didn't know anything about the broken modules I was getting.

Is this a bug in boost.python? I plan to write a small patch tomorrow
to set the m_name field in init_module(), so maybe this will fix the
problem.

If this isn't a boost.python bug, does anyone have any idea what might
be going wrong? And how is it correct that the static moduledef is
reused without updating its name?

Thanks,
Austin
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to