tags 321644 +patch tags 336441 +patch thanks On Sun, Oct 30, 2005 at 02:40:47PM +0100, Lionel Elie Mamane wrote: > On Sun, Oct 30, 2005 at 02:19:34PM +0100, Lionel Elie Mamane wrote:
>> At this point, this may be a dupe of #321644. Recompiling Mozilla to >> test it. > Yup, compiling with "-O" instead of "-g -O2" solves it, so this seems > to be a dupe of #321644. > Further comment, though: Please look at > https://bugzilla.mozilla.org/show_bug.cgi?id=293307 > https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=160330 > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11376 > This seems to be a bug in *Mozilla* (aliasing violation) which is > triggered only when compiling with -O2 (or greater). > In particular, https://bugzilla.mozilla.org/show_bug.cgi?id=293307 > contains a patch (which I haven't tested yet). A slightly edited version of this patch, herewith attached, solves at least a specific crash I was having, even when compiling with OPTFLAGS=-g -O2 -DDEBIAN . -- Lionel
Index: imgLoader.cpp =================================================================== RCS file: /cvsroot/mozilla/modules/libpr0n/src/imgLoader.cpp,v retrieving revision 1.87 diff -up -r1.87 imgLoader.cpp --- mozilla/modules/libpr0n/src/imgLoader.cpp +++ mozilla/modules/libpr0n/src/imgLoader.cpp @@ -926,7 +926,7 @@ void imgCacheValidator::AddProxy(imgRequ // the network. aProxy->AddToLoadGroup(); - mProxies.AppendElement(aProxy); + mProxies.AppendObject(aProxy); } /** nsIRequestObserver methods **/ @@ -939,13 +939,10 @@ NS_IMETHODIMP imgCacheValidator::OnStart PRBool isFromCache; if (NS_SUCCEEDED(cacheChan->IsFromCache(&isFromCache)) && isFromCache) { - PRUint32 count; - mProxies.Count(&count); + PRUint32 count = mProxies.Count(); for (PRInt32 i = count-1; i>=0; i--) { - imgRequestProxy *proxy; - mProxies.GetElementAt(i, (nsISupports**)&proxy); + imgRequestProxy *proxy = NS_STATIC_CAST(imgRequestProxy *, mProxies[i]); mRequest->NotifyProxyListener(proxy); - NS_RELEASE(proxy); } mRequest->SetLoadId(mContext); @@ -994,14 +991,11 @@ NS_IMETHODIMP imgCacheValidator::OnStart mDestListener = NS_STATIC_CAST(nsIStreamListener*, pl); - PRUint32 count; - mProxies.Count(&count); + PRUint32 count = mProxies.Count(); for (PRInt32 i = count-1; i>=0; i--) { - imgRequestProxy *proxy; - mProxies.GetElementAt(i, (nsISupports**)&proxy); + imgRequestProxy *proxy = NS_STATIC_CAST(imgRequestProxy *, mProxies[i]); proxy->ChangeOwner(request); request->NotifyProxyListener(proxy); - NS_RELEASE(proxy); } NS_RELEASE(request); Index: imgLoader.h =================================================================== RCS file: /cvsroot/mozilla/modules/libpr0n/src/imgLoader.h,v retrieving revision 1.12 diff -up -r1.12 imgLoader.h --- mozilla/modules/libpr0n/src/imgLoader.h +++ mozilla/modules/libpr0n/src/imgLoader.h @@ -106,7 +106,7 @@ private: * validate checker */ -#include "nsSupportsArray.h" +#include "nsCOMArray.h" class imgCacheValidator : public nsIStreamListener { @@ -125,7 +125,7 @@ private: nsCOMPtr<nsIStreamListener> mDestListener; imgRequest *mRequest; - nsSupportsArray mProxies; + nsCOMArray<imgIRequest> mProxies; void *mContext; };