[PyKDE] a bug in virtual handler?
    Fukuda Masaki 
    fukuda at wni.co.jp
       
    Sun Oct 24 08:57:30 BST 1999
    
    
  
Hello folks,
I'm trying to generate python bindings of my application.
I got a problem in virtual handler that return class-type.
I can not get correct return value in C++ side.
C++ and SIP code:
class RpdSheet : QObject {
public:
  RpdSheet(const char* = 0);
  virtual RpdRect2D boundingRect();
[...]
};
Generated binding code is:
RpdRect2D sipRpdSheet::sipVH_boundingRect(const sipMethodCache *pymc,sipThisType *sipThis,int sipRelLock)
{
	RpdRect2D *res;
	PyObject *resobj;
	PyObject *sipArgs;
	sipArgs = Py_BuildValue("(O)",sipThis -> sipSelf);
	if (sipArgs == NULL)
		goto reportError;
	resobj = PyEval_CallObject(pymc -> pyMethod,sipArgs);
	Py_DECREF(sipArgs);
	if (resobj != NULL)
	{
		bool iserr = false;
		if (sipCanConvertToCpp(resobj,sipClass_RpdRect2D))
			res = (RpdRect2D *)sipConvertToCpp(resobj,sipClass_RpdRect2D,&iserr);
		else
			iserr = true;
		Py_DECREF(resobj); // !!!!!!!! HERE !!!!!!!!
                                   // !!!!!  *res is released ???
		if (!iserr)
			goto releaseLock;
		sipBadVirtualResultType(sipName_rapid2_RpdSheet,sipName_qt_boundingRect);
	}
reportError:
	PyErr_Print();
releaseLock:
	sipCondReleaseLock(sipRelLock);
	return *res;
}
In sipVH_xxxx() generated by sip-0.9, do Py_DECREF(resobj)
before return. I think, when Py_DECREF do, the memory pointed
 by 'res' released, correct?
Does anyone have this solution? 
thanks in advanse.
------------------------------------------
Masaki Fukuda <fukuda at wni.co.jp>
(BCDE)Weathernews, Inc.
Phone:043-274-5508, FAX:043-274-4957,4955
    
    
More information about the PyQt
mailing list