in fact commit 49a696a80c introduced the test and fdf334d814 fixes the bug it shows
the only thing I can see is ordering - the commits between fail the tests what am I missing? -m Am 18.02.2012 um 01:16 schrieb Sebastian Kuzminsky: > Something in this patch bomb broke the interp/python-self test. > > On Feb 17, 2012, at 16:31 , Michael Haberler wrote: > >> interp/python: drop reference to shared_ptr, use boost::cref >> >> Using cref ensures that a call from C++->Python does not instantiate a >> new wrapper object for 'self'. >> >> Adapt interpreter calls to changed pythonplugin interface. >> >> >> http://git.linuxcnc.org/?p=emc2.git;a=commitdiff;h=fdf334d >> >> --- >> .../remap/iocontrol-removed/python/customtask.py | 5 ++- >> src/emc/rs274ngc/interp_internal.hh | 4 +-- >> src/emc/rs274ngc/interp_python.cc | 2 - >> src/emc/rs274ngc/interpmodule.cc | 3 +- >> src/emc/rs274ngc/interpmodule.hh | 2 - >> src/emc/rs274ngc/rs274ngc_pre.cc | 30 ++++++++++++++----- >> src/emc/task/taskclass.cc | 4 +- >> 7 files changed, 30 insertions(+), 20 deletions(-) >> >> diff --git a/configs/sim/remap/iocontrol-removed/python/customtask.py >> b/configs/sim/remap/iocontrol-removed/python/customtask.py >> index a540500..7eaf536 100644 >> --- a/configs/sim/remap/iocontrol-removed/python/customtask.py >> +++ b/configs/sim/remap/iocontrol-removed/python/customtask.py >> @@ -24,7 +24,10 @@ except ImportError: >> from nulluserfuncs import UserFuncs >> >> def debug(): >> - return interpreter.this.debugmask & 0x00040000 # EMC_DEBUG_PYTHON_TASK >> + # interpreter.this isnt usable until after Interpreter.init has been >> called >> + if hasattr(interpreter,'this'): >> + return interpreter.this.debugmask & 0x00040000 # >> EMC_DEBUG_PYTHON_TASK >> + return >> >> >> def handler(signum, frame): >> diff --git a/src/emc/rs274ngc/interp_internal.hh >> b/src/emc/rs274ngc/interp_internal.hh >> index 8f1fab9..e61dbbf 100644 >> --- a/src/emc/rs274ngc/interp_internal.hh >> +++ b/src/emc/rs274ngc/interp_internal.hh >> @@ -722,9 +722,7 @@ typedef struct setup_struct >> // do not lowercase named params inside comments - for #<_hal[PinName]> >> #define FEATURE_NO_DOWNCASE_OWORD 0x00000010 >> >> - >> - interp_ptr pythis; // shared_ptr representation of 'this' >> - >> + boost::python::object pythis; // boost::cref to 'this' >> const char *on_abort_command; >> int_remap_map g_remapped,m_remapped; >> remap_map remaps; >> diff --git a/src/emc/rs274ngc/interp_python.cc >> b/src/emc/rs274ngc/interp_python.cc >> index a982754..e8618d6 100644 >> --- a/src/emc/rs274ngc/interp_python.cc >> +++ b/src/emc/rs274ngc/interp_python.cc >> @@ -35,8 +35,6 @@ namespace bp = boost::python; >> #include "interp_internal.hh" >> #include "rs274ngc_interp.hh" >> #include "units.h" >> -#include "interpmodule.hh" >> - >> >> extern PythonPlugin *python_plugin; >> >> diff --git a/src/emc/rs274ngc/interpmodule.cc >> b/src/emc/rs274ngc/interpmodule.cc >> index b34c5a6..a1f9e4b 100644 >> --- a/src/emc/rs274ngc/interpmodule.cc >> +++ b/src/emc/rs274ngc/interpmodule.cc >> @@ -17,7 +17,6 @@ namespace bp = boost::python; >> #include "interp_internal.hh" >> #include "rs274ngc_interp.hh" >> #include "units.h" >> -#include "interpmodule.hh" >> #include "array1.hh" >> >> namespace pp = pyplusplus::containers::static_sized; >> @@ -591,7 +590,7 @@ BOOST_PYTHON_MODULE(interpreter) { >> bp::register_exception_translator<InterpreterException> >> (&translateInterpreterException); >> >> - class_< Interp, interp_ptr, noncopyable >("Interp",no_init) //OK >> + class_< Interp, noncopyable >("Interp",no_init) >> >> .def("find_tool_pocket", &wrap_find_tool_pocket) >> .def("load_tool_table", &Interp::load_tool_table) >> diff --git a/src/emc/rs274ngc/interpmodule.hh >> b/src/emc/rs274ngc/interpmodule.hh >> deleted file mode 100644 >> index c3d43eb..0000000 >> --- a/src/emc/rs274ngc/interpmodule.hh >> +++ /dev/null >> @@ -1,2 +0,0 @@ >> -typedef boost::shared_ptr< Interp > interp_ptr; >> - >> diff --git a/src/emc/rs274ngc/rs274ngc_pre.cc >> b/src/emc/rs274ngc/rs274ngc_pre.cc >> index 9209943..d1eeb88 100644 >> --- a/src/emc/rs274ngc/rs274ngc_pre.cc >> +++ b/src/emc/rs274ngc/rs274ngc_pre.cc >> @@ -88,16 +88,11 @@ include an option for suppressing superfluous commands. >> #include "interp_internal.hh" // interpreter private definitions >> #include "interp_queue.hh" >> #include "rs274ngc_interp.hh" >> -//#include "rs274ngc_errors.cc" >> - >> -#include "interpmodule.hh" >> >> #include "units.h" >> >> -static void interpDeallocFunc(Interp *interp) {} // >> http://hafizpariabi.blogspot.com/2008/01/using-custom-deallocator-in.html >> extern char * _rs274ngc_errors[]; >> >> - >> const char *Interp::interp_status(int status) { >> static char statustext[50]; >> static const char *msgs[] = { "INTERP_OK", "INTERP_EXIT", >> @@ -114,7 +109,6 @@ int trace; >> Interp::Interp() >> : log_file(0) >> { >> - // _setup.py_module_stat = PYMOD_NONE; >> init_named_parameters(); // need this before Python init. FIXME logging >> broken - too early in startup >> if (trace) fprintf(stderr,"---> new Interp() pid=%d\"",getpid()); >> } >> @@ -868,9 +862,29 @@ int Interp::init() >> // initialize the Python plugin singleton >> extern struct _inittab builtin_modules[]; >> if (inifile.Find("TOPLEVEL", "PYTHON")) { >> - if (PythonPlugin::configure(iniFileName,"PYTHON", >> builtin_modules, this) != NULL) { >> + if (PythonPlugin::configure(iniFileName,"PYTHON", >> builtin_modules) != NULL) { >> logPy("Python plugin configured"); >> - _setup.pythis = interp_ptr(this, interpDeallocFunc); >> + try { >> + // this import will register the C++->Python converter >> for Interp >> + bp::object interp_module = bp::import("interpreter"); >> + >> + // use a boost::cref to avoid per-call instantiation of >> the >> + // Interp Python wrapper (used for the 'self' parameter >> in handlers) >> + _setup.pythis = boost::python::object(boost::cref(this)); >> + >> + // alias to 'interpreter.this' for the sake of ';py, .... >> '' comments >> + bp::scope(interp_module).attr("this") = _setup.pythis; >> + } >> + catch (bp::error_already_set) { >> + std::string exception_msg; >> + if (PyErr_Occurred()) { >> + exception_msg = handle_pyerror(); >> + } else >> + exception_msg = "unknown exception"; >> + bp::handle_exception(); >> + PyErr_Clear(); >> + Error("PYTHON: exception during 'this' >> export:\n%s\n",exception_msg.c_str()); >> + } >> } else { >> Error("no Python plugin available"); >> } >> diff --git a/src/emc/task/taskclass.cc b/src/emc/task/taskclass.cc >> index 00360d2..863f9c5 100644 >> --- a/src/emc/task/taskclass.cc >> +++ b/src/emc/task/taskclass.cc >> @@ -300,15 +300,15 @@ int emcTaskOnce(const char *filename) >> bp::object retval; >> bp::tuple arg; >> bp::dict kwarg; >> - extern Interp interp; >> >> // initialize the Python plugin singleton >> // Interp is already instantiated but not yet fully configured >> // both Task and Interp use it - first to call configure() instantiates >> the Python part >> + // NB: the interpreter.this global will appear only after Interp.init() >> >> extern struct _inittab builtin_modules[]; >> >> - if (PythonPlugin::configure(filename, "PYTHON", builtin_modules, >> &interp)) { >> + if (PythonPlugin::configure(filename, "PYTHON", builtin_modules)) { >> if (emc_debug & EMC_DEBUG_PYTHON_TASK) { >> rcs_print("emcTaskOnce: Python plugin configured"); >> } >> >> ------------------------------------------------------------------------------ >> Virtualization & Cloud Management Using Capacity Planning >> Cloud computing makes use of virtualization - but cloud computing >> also focuses on allowing computing to be delivered as a service. >> http://www.accelacomm.com/jaw/sfnl/114/51521223/ >> _____________________________________________ >> Emc-commit mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/emc-commit > > -- > Sebastian Kuzminsky > > > ------------------------------------------------------------------------------ > Virtualization & Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Emc-developers mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/emc-developers ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Emc-developers mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/emc-developers
