Toby Sargeant wrote: > > In sipGetThis, there is the code fragment: > > if (thisObj != NULL) > { > // sipParseArgs() will decrement the reference count. > > Py_INCREF(arg); > return (sipThisType *)thisObj; > } > > The comment appears not to be true, and the arg tuple passed to sipParseArgs > never gets gc'ed as a result of the incref. commenting it out fixed the > problem. > > Toby. In pre5 I provided the wrong fix to a bug which made the comment untrue. The attached patches reverse the wrong fix in siplib.cpp and apply the correct fix to gencode.c. I haven't tested these. Phil
--- Homepage/software/private/sip-0.10pre5/siplib/siplib.cpp Wed Dec 1 20:34:17 1999 +++ src/sip/siplib/siplib.cpp Mon Dec 6 19:49:28 1999 @@ -143,11 +143,11 @@ // See if we need to dispose of the arguments on a successful parse. - decref = false; + decref = true; if (*fmt == '-') { - decref = true; + decref = false; ++fmt; }
--- Homepage/software/private/sip-0.10pre5/sip/gencode.c Wed Dec 1 23:24:06 1999 +++ src/sip/sip/gencode.c Mon Dec 6 19:58:22 1999 @@ -4274,10 +4274,11 @@ char *cname, *cmname; char *pmname = md -> pyname -> module -> name -> text; char *pname = md -> pyname -> text; - int noIntro; + int noIntro, noDecr; overDef *od; noIntro = TRUE; + noDecr = TRUE; for (od = md -> overloads; od != NULL; od = od -> next) { @@ -4316,6 +4317,7 @@ "{\n" ,cname,pname); else + { prcode(fp, "\n" "static PyObject *sipDo_%s_%s(PyObject *sipThisObj,PyObject *sipArgs)\n" @@ -4325,6 +4327,9 @@ " if ((sipThis = sipGetThis(sipThisObj,&sipArgs,sipClass_%s)) == NULL)\n" " return NULL;\n" ,cname,pname,cname); + + noDecr = FALSE; + } } } @@ -4343,7 +4348,7 @@ { int needSecCall; - needSecCall = generateArgParser(&od -> args,(cvd == NULL),FALSE,fp); + needSecCall = generateArgParser(&od -> args,noDecr,FALSE,fp); generateFunctionCall(pt,cvd,md,od,FALSE,fp); if (needSecCall) @@ -4354,7 +4359,7 @@ " {\n" ); - generateArgParser(&od -> args,(cvd == NULL),TRUE,fp); + generateArgParser(&od -> args,noDecr,TRUE,fp); generateFunctionCall(pt,cvd,md,od,TRUE,fp); } }