diff --git a/mozilla/extensions/python/xpcom/src/PyGBase.cpp b/mozilla/extensions/python/xpcom/src/PyGBase.cpp index 5a4c3ceaace..34ec66cff8d 100644 --- a/mozilla/extensions/python/xpcom/src/PyGBase.cpp +++ b/mozilla/extensions/python/xpcom/src/PyGBase.cpp @@ -387,8 +387,15 @@ PyG_Base::Release(void) NS_IMETHODIMP PyG_Base::GetWeakReference(nsIWeakReference **ret) { + // always delegate back to the "base" gateway for the object, as this tear-off + // interface may not live as long as the base. So we recurse back to the base. + if (m_pBaseObject) { + NS_PRECONDITION(m_pWeakRef == nsnull, "Not a base object, but do have a weak-ref!"); + return m_pBaseObject->GetWeakReference(ret); + } NS_PRECONDITION(ret, "null pointer"); if (ret==nsnull) return NS_ERROR_INVALID_POINTER; + // explicit QI back to nsISupports if (!m_pWeakRef) { // First query for a weak reference - create it. m_pWeakRef = new PyXPCOM_GatewayWeakReference(this);