From fb97ac8491a83e7012f66fa1e2dc97202b9a2180 Mon Sep 17 00:00:00 2001 From: "kipp%netscape.com" Date: Fri, 5 Mar 1999 04:35:37 +0000 Subject: [PATCH] Clean up query-interface; attempt to work around bug (failed; left some commentary in to help the netlib crew) git-svn-id: svn://10.0.0.236/trunk@22852 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/network/module/nsNetStreamLoader.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/mozilla/network/module/nsNetStreamLoader.cpp b/mozilla/network/module/nsNetStreamLoader.cpp index 4edffae44b7..e9f537c18b8 100644 --- a/mozilla/network/module/nsNetStreamLoader.cpp +++ b/mozilla/network/module/nsNetStreamLoader.cpp @@ -62,11 +62,15 @@ nsUnicharStreamLoader::nsUnicharStreamLoader(nsIURL* aURL, mRef = aRef; mData = new nsString(); + // XXX This is vile vile vile!!! nsresult rv; if (aURL) { rv = NS_OpenURL(aURL, this); if ((NS_OK != rv) && (nsnull != mFunc)) { + // Thou shalt not call out of scope whilst ones refcnt is zero + mRefCnt = 999; (*mFunc)(this, *mData, mRef, rv); + mRefCnt = 0; } } } @@ -88,17 +92,21 @@ nsUnicharStreamLoader::QueryInterface(const nsIID &aIID, void** aInstancePtr) return NS_ERROR_NULL_POINTER; } if (aIID.Equals(kIStreamListenerIID)) { - *aInstancePtr = (void*) ((nsIStreamListener*)this); + nsIStreamListener* tmp = this; + *aInstancePtr = (void*) tmp; AddRef(); return NS_OK; } if (aIID.Equals(kIUnicharStreamLoaderIID)) { - *aInstancePtr = (void*) ((nsIUnicharStreamLoader*)this); + nsIUnicharStreamLoader* tmp = this; + *aInstancePtr = (void*) tmp; AddRef(); return NS_OK; } if (aIID.Equals(kISupportsIID)) { - *aInstancePtr = ((nsISupports *)(nsIUnicharStreamLoader *)this); + nsIUnicharStreamLoader* tmp = this; + nsISupports* tmp2 = tmp; + *aInstancePtr = (void*) tmp2; AddRef(); return NS_OK; }