Re: How to add code to a C wrapper function generated by SWIG (for Python)

Rokas Kupstys via Swig-user <[email protected]> Fri, 22 Jan 2021 13:03:58 +0200
Newsgroups gmane.comp.programming.swig
Message-ID <[email protected]>
And you have to call destructor manually instead of wrapper handling it?

-- Rokas Kupstys

On 2021-01-22 12:57, Ian Boyd wrote:
> Yes, that's the point - to prevent the generation of the wrapper. The 
> destructor is then implemented using %extend.
>
> The reason I remember this approach is that I had to fix up some code 
> a couple of years ago that had done something like this. I ran into 
> issues because of a Swig upgrade. There is a small thread in the 
> archives: https://sourceforge.net/p/swig/mailman/message/36465099/ 
> <https://sourceforge.net/p/swig/mailman/message/36465099/>
>
> It was someone else's code I was fixing up. I am not an expert on 
> this, and it might not be the right approach, but I thought I would 
> mention in case it might be useful in this case.
>
> On Fri, 22 Jan 2021 at 10:38, Rokas Kupstys via Swig-user 
> <[email protected] 
> <mailto:[email protected]>> wrote:
>
>     How would that work? %ignore would prevent generation of wrappers
>     for ignored thing. I dont see how ignored destructor would then be
>     called by wrapper code at appropriate time.
>
>     -- Rokas Kupstys
>
>     On 2021-01-22 12:12, Ian Boyd wrote:
>>     Another option I think I have seen before is to use %ignore to
>>     prevent Swig from generating a destructor and then use %extend to
>>     implement a custom one.
>>
>>     On Fri, 22 Jan 2021 at 10:00, Rokas Kupstys via Swig-user
>>     <[email protected]
>>     <mailto:[email protected]>> wrote:
>>
>>         Maybe %newobject + %newfree typemaps would work for you in
>>         this case?
>>
>>         -- Rokas Kupstys
>>
>>         On 2021-01-22 10:48, lille stor wrote:
>>>
>>>         Hi,
>>>
>>>         When generating a Python wrapper using SWIG, many C wrapper
>>>         functions are generated. One of them is called
>>>         "|_wrap_delete_Cursor" which looks like this| (I have
>>>         stripped it to the bare minimum):
>>>
>>>         |SWIGINTERN PyObject *_wrap_delete_Cursor(PyObject *self,
>>>         PyObject *args) { // some generated C code by SWIG   // need
>>>         to add code to call a C function to release allocated memory } |
>>>
>>>         This function is called when the object Cursor (created in
>>>         Python) no longer exists. Now, my problem is that I have
>>>         some allocated memory on the C side that needs to be
>>>         released before existing the function (otherwise, there will
>>>         be memory leaks).
>>>
>>>         Do you know how I can add a line of code this function to
>>>         release memory? All help is really welcome!
>>>
>>>         L.
>>>
>>>
>>>
>>>         _______________________________________________
>>>         Swig-user mailing list
>>>         [email protected]  <mailto:[email protected]>
>>>         https://lists.sourceforge.net/lists/listinfo/swig-user  <https://lists.sourceforge.net/lists/listinfo/swig-user>
>>         _______________________________________________
>>         Swig-user mailing list
>>         [email protected]
>>         <mailto:[email protected]>
>>         https://lists.sourceforge.net/lists/listinfo/swig-user
>>         <https://lists.sourceforge.net/lists/listinfo/swig-user>
>>
>     _______________________________________________
>     Swig-user mailing list
>     [email protected]
>     <mailto:[email protected]>
>     https://lists.sourceforge.net/lists/listinfo/swig-user
>     <https://lists.sourceforge.net/lists/listinfo/swig-user>
>

_______________________________________________
Swig-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/swig-user