On Fri, Mar 23, 2001 at 03:58:49PM -0800, Alec Flett wrote:
> John,
> I was just talking with shaver on IRC about this, was wondering if you 
> had any ideas about what to do. Basically, I'm trying to move a C++ 
> implementation of an nsIURIContentListener into JS. The way these are 
> used are via the URILoader service:
> 
> uriLoader.registerContentListener(foo);
> 
> and uriLoader stores a weak reference to "foo" in an nsVoidArray.
> but the problem is that when I go to unregister the javascript version:
> 
> uriLoader.unRegisterContentListener(foo)
> 
> a different pointer seems to get passed into unRegisterContentListener() 
> - so the unregistration never happens, and we're left with a weak 
> reference to a disposed-of wrapper object in a void array, which 
> subsequently causes a crash.... and just to make sure I wasn't going 
> crazy, I did this:
> 
> uriLoader.unRegisterContentListener(foo)
> uriLoader.unRegisterContentListener(foo)
> 
> and amazingly got two different pointers from c++, neither of which 
> matched the original.
> 
> any thoughts? I'm holding a strong reference to the object else from 
> C++, but I haven't looked to see what the value of THAT pointer is yet...
> 

And just to get this question out of the way... Your QI does specifically
list nsISupportsWeakReference, right?

  jag

Reply via email to