On Tuesday 17 July 2007 2:34 pm, Giovanni Bajo wrote:
> On 7/16/2007 2:36 PM, Phil Thompson wrote:
> > This will be fixed in tonight's PyQt snapshot.
> >
> > The proxy created to handle the signal was being incorrectly reused by a
> > new QObject created at the same address as the one the proxy was created
> > for. Because there is no event processing going on, the proxy was not
> > getting deleted - because it was waiting for a deleteLater() to be acted
> > on.
>
> I now get other crashes: from the debug, it seems like an instance of
> PyQtProxy which is already deleted is still part of the global list
> (uniproxies). Using debug builds of MS CRT, C++ instances which are
> deleted are filled with 0xFEFEFEFE, so I'm pretty sure of this symptom.
>
> I had a look at your fix, and you moved the code to remove the PyQtProxy
> instance from the global list to the new disable() slot. Thus, if an
> instance of PyQtProxy is deleted directly without going through the
> slot, it will still be presente in the global list.

Understood.

> I copied the list removal code back into the destructor (keeping a duped
> copy in the disable() slot), and it seems to work.
>
> Do you agree on this fix? Testcases are really hard and tiresome to
> extract so I'd rather avoid it if it's not really really necessary...

I can only see one place that a PyQtProxy is explicitly deleted. Can you try 
changing the "delete up" in sipQtDestroyUniversalSlot() to "up->disable()" 
instead of your fix.

Phil
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to