+ fix crash due to sloppy reference counting

This commit is contained in:
wmayer 2015-09-15 18:19:36 +02:00
parent fa1d43345a
commit 5652ca2c61
4 changed files with 20 additions and 1 deletions

View File

@ -891,6 +891,8 @@ PyObject* Application::sDoCommand(PyObject * /*self*/, PyObject *args,PyObject *
if (!PyArg_ParseTuple(args, "s", &pstr)) // convert args: Python->C
return NULL; // NULL triggers exception
Command::doCommand(Command::Doc,pstr);
Py_INCREF(Py_None);
return Py_None;
}
@ -900,6 +902,8 @@ PyObject* Application::sDoCommandGui(PyObject * /*self*/, PyObject *args,PyObjec
if (!PyArg_ParseTuple(args, "s", &pstr)) // convert args: Python->C
return NULL; // NULL triggers exception
Command::runCommand(Command::Gui,pstr);
Py_INCREF(Py_None);
return Py_None;
}
@ -909,6 +913,8 @@ PyObject* Application::sAddModule(PyObject * /*self*/, PyObject *args,PyObject *
if (!PyArg_ParseTuple(args, "s", &pstr)) // convert args: Python->C
return NULL; // NULL triggers exception
Command::addModule(Command::Doc,pstr);
Py_INCREF(Py_None);
return Py_None;
}
@ -917,5 +923,7 @@ PyObject* Application::sShowDownloads(PyObject * /*self*/, PyObject *args,PyObje
if (!PyArg_ParseTuple(args, "")) // convert args: Python->C
return NULL; // NULL triggers exception
Gui::Dialog::DownloadManager::getInstance();
Py_INCREF(Py_None);
return Py_None;
}

View File

@ -167,6 +167,7 @@ PyObject* CommandPy::setFromGCode(PyObject *args)
if (PyArg_ParseTuple(args, "s", &pstr)) {
std::string gcode(pstr);
getCommandPtr()->setFromGCode(gcode);
Py_INCREF(Py_None);
return Py_None;
}
throw Py::Exception("Argument must be a string");
@ -211,6 +212,7 @@ PyObject *CommandPy::getCustomAttributes(const char* attr) const
if (getCommandPtr()->Parameters.count(satt)) {
return PyFloat_FromDouble(getCommandPtr()->Parameters[satt]);
}
Py_INCREF(Py_None);
return Py_None;
}
}

View File

@ -189,6 +189,7 @@ PyObject* PathPy::setFromGCode(PyObject * args)
if (PyArg_ParseTuple(args, "s", &pstr)) {
std::string gcode(pstr);
getToolpathPtr()->setFromGCode(gcode);
Py_INCREF(Py_None);
return Py_None;
}
throw Py::Exception("Argument must be a string");

View File

@ -436,6 +436,7 @@ PyObject* TooltablePy::addTools(PyObject * args)
Path::Tool &tool = *static_cast<Path::ToolPy*>(o)->getToolPtr();
getTooltablePtr()->addTool(tool);
//return new TooltablePy(new Path::Tooltable(*getTooltablePtr()));
Py_INCREF(Py_None);
return Py_None;
}
PyErr_Clear();
@ -448,6 +449,7 @@ PyObject* TooltablePy::addTools(PyObject * args)
}
}
//return new TooltablePy(new Path::Tooltable(*getTooltablePtr()));
Py_INCREF(Py_None);
return Py_None;
}
Py_Error(Base::BaseExceptionFreeCADError, "Wrong parameters - tool or list of tools expected");
@ -461,6 +463,7 @@ PyObject* TooltablePy::setTool(PyObject * args)
Path::Tool &tool = *static_cast<Path::ToolPy*>(o)->getToolPtr();
getTooltablePtr()->setTool(tool,pos);
//return new TooltablePy(new Path::Tooltable(*getTooltablePtr()));
Py_INCREF(Py_None);
return Py_None;
}
Py_Error(Base::BaseExceptionFreeCADError, "Wrong parameters - expected tool and optional integer");
@ -474,8 +477,12 @@ PyObject* TooltablePy::getTool(PyObject * args)
{
Path::Tool tool = getTooltablePtr()->getTool(pos);
return new ToolPy(new Path::Tool(tool));
} else
}
else
{
Py_INCREF(Py_None);
return Py_None;
}
}
Py_Error(Base::BaseExceptionFreeCADError, "Argument must be integer");
}
@ -486,6 +493,7 @@ PyObject* TooltablePy::deleteTool(PyObject * args)
if (PyArg_ParseTuple(args, "|i", &pos)) {
getTooltablePtr()->deleteTool(pos);
//return new TooltablePy(new Path::Tooltable(*getTooltablePtr()));
Py_INCREF(Py_None);
return Py_None;
}
Py_Error(Base::BaseExceptionFreeCADError, "Wrong parameters - expected an integer (optional)");