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);
                        }
                }

Reply via email to