Fold fixes and remove patches that were upstreamed and are therefore no longer valid.
authorBenjamin Smedberg <benjamin@smedbergs.us>
Sun, 13 Jul 2008 10:44:54 -0400
changeset 154 7b66eb66ba95
parent 153 cd96178a2e47
child 155 236864c4d239
push id30
push userbsmedberg@mozilla.com
push dateSun, 13 Jul 2008 14:45:31 +0000
Fold fixes and remove patches that were upstreamed and are therefore no longer valid.
content-stack-classes
core-refcounting
core-refcounting2
editor-stack-classes
gfx-refcounting
gfx-refcounting2
layout-stack-classes
series
tamarin-bug-427030-v1.patch
tamarin-bug-427030-v1.patch2
tamarin-gcstack-access
tamarin-stack-access2
deleted file mode 100644
--- a/content-stack-classes
+++ /dev/null
@@ -1,2 +0,0 @@
-Annotate classes in dom/content which only appear on the stack.
-
--- a/core-refcounting
+++ b/core-refcounting
@@ -1,8 +1,9 @@
+* * *
 * * *
 * * *
 
 diff --git a/core/Makefile.in b/core/Makefile.in
 new file mode 100644
 --- /dev/null
 +++ b/core/Makefile.in
 @@ -0,0 +1,52 @@
@@ -57,17 +58,17 @@ new file mode 100644
 +  RefPtr.h \
 +  $(NULL)
 +
 +include $(topsrcdir)/config/rules.mk
 diff --git a/core/RefPtr.h b/core/RefPtr.h
 new file mode 100644
 --- /dev/null
 +++ b/core/RefPtr.h
-@@ -0,0 +1,232 @@
+@@ -0,0 +1,238 @@
 +/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
 +/* ***** BEGIN LICENSE BLOCK *****
 + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 + *
 + * The contents of this file are subject to the Mozilla Public License Version
 + * 1.1 (the "License"); you may not use this file except in compliance with
 + * the License. You may obtain a copy of the License at
 + * http://www.mozilla.org/MPL/
@@ -134,16 +135,22 @@ new file mode 100644
 +    {
 +    private:
 +        T *mRawPtr;
 +
 +    public:
 +        explicit AddRefed(T *ptr) : mRawPtr(ptr) { }
 +
 +        T* get() const { return mRawPtr; }
++
++        // allow conversion from AddRefed<DerivedClass> to AddRefed<BaseClass>
++        template<class D>
++        operator AddRefed<D>() const {
++            return AddRefed<D>(mRawPtr);
++        }
 +    };
 +
 +    template<class T>
 +    class RefPtr
 +    {
 +    private:
 +        T *mPtr;
 +
deleted file mode 100644
--- a/core-refcounting2
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/core/RefPtr.h b/core/RefPtr.h
---- a/core/RefPtr.h
-+++ b/core/RefPtr.h
-@@ -74,6 +74,12 @@ namespace mozilla
-         explicit AddRefed(T *ptr) : mRawPtr(ptr) { }
- 
-         T* get() const { return mRawPtr; }
-+
-+        // allow conversion from AddRefed<DerivedClass> to AddRefed<BaseClass>
-+        template<class D>
-+        operator AddRefed<D>() const {
-+            return AddRefed<D>(mRawPtr);
-+        }
-     };
- 
-     template<class T>
deleted file mode 100644
--- a/editor-stack-classes
+++ /dev/null
@@ -1,2 +0,0 @@
-Add stack annotations to editor classes.
-
--- a/gfx-refcounting
+++ b/gfx-refcounting
@@ -1,9 +1,10 @@
 Bug 421127 - Switch GFX refcounting to its own class hierarchy, so that it doesn't conflict with XPCOMGC work
+* * *
 
 diff --git a/chrome/src/Makefile.in b/chrome/src/Makefile.in
 --- a/chrome/src/Makefile.in
 +++ b/chrome/src/Makefile.in
 @@ -59,6 +59,7 @@ REQUIRES	= xpcom \
  		  xuldoc \
  		  gfx \
  		  layout \
@@ -40,16 +41,25 @@ diff --git a/content/canvas/src/nsCanvas
      // yay cairo
 -    nsRefPtr<gfxContext> mThebesContext;
 -    nsRefPtr<gfxASurface> mThebesSurface;
 +    RefPtr<gfxContext> mThebesContext;
 +    RefPtr<gfxASurface> mThebesSurface;
  
      PRUint32 mSaveCount;
      cairo_t *mCairo;
+@@ -471,7 +473,7 @@ protected:
+         float globalAlpha;
+ 
+         nsString font;
+-        nsRefPtr<gfxFontGroup> fontGroup;
++        RefPtr<gfxFontGroup> fontGroup;
+         TextAlign textAlign;
+         TextBaseline textBaseline;
+ 
 @@ -853,7 +855,7 @@ nsCanvasRenderingContext2D::Render(gfxCo
      if (!mThebesSurface)
          return NS_ERROR_FAILURE;
  
 -    nsRefPtr<gfxPattern> pat = new gfxPattern(mThebesSurface);
 +    RefPtr<gfxPattern> pat = new gfxPattern(mThebesSurface);
  
      gfxContext::GraphicsOperator op = ctx->CurrentOperator();
@@ -2854,25 +2864,48 @@ diff --git a/layout/base/nsCSSRendering.
  
  #include "gfxContext.h"
  
 +using namespace mozilla;
 +
  #define BORDER_FULL    0        //entire side
  #define BORDER_INSIDE  1        //inside half
  #define BORDER_OUTSIDE 2        //outside half
+@@ -3369,7 +3371,7 @@ nsCSSRendering::PaintBoxShadow(nsPresCon
+     shadowRectPlusBlur.RoundOut();
+ 
+     gfxContext* renderContext = aRenderingContext.ThebesContext();
+-    nsRefPtr<gfxContext> shadowContext;
++    RefPtr<gfxContext> shadowContext;
+     nsContextBoxBlur blurringArea;
+ 
+     // shadowRect has already been converted to device pixels, pass 1 as the appunits/pixel value
 @@ -4595,7 +4597,7 @@ nsCSSRendering::PaintDecorationLine(gfxC
    PRBool contextIsSaved = PR_FALSE;
  
    gfxFloat oldLineWidth;
 -  nsRefPtr<gfxPattern> oldPattern;
 +  RefPtr<gfxPattern> oldPattern;
  
    switch (aStyle) {
      case NS_STYLE_BORDER_STYLE_SOLID:
+diff --git a/layout/base/nsCSSRendering.h b/layout/base/nsCSSRendering.h
+--- a/layout/base/nsCSSRendering.h
++++ b/layout/base/nsCSSRendering.h
+@@ -390,8 +390,8 @@ protected:
+                        PRUint32 aTopLobe,
+                        PRUint32 aBottomLobe);
+ 
+-  nsRefPtr<gfxContext> mContext;
+-  nsRefPtr<gfxImageSurface> mImageSurface;
++  mozilla::RefPtr<gfxContext> mContext;
++  mozilla::RefPtr<gfxImageSurface> mImageSurface;
+   gfxContext* mDestinationCtx;
+ 
+   // Contrary to what is passed as parameters, these are in device pixels
 diff --git a/layout/base/nsDisplayList.cpp b/layout/base/nsDisplayList.cpp
 --- a/layout/base/nsDisplayList.cpp
 +++ b/layout/base/nsDisplayList.cpp
 @@ -50,6 +50,8 @@
  #include "nsRegion.h"
  #include "nsFrameManager.h"
  #include "gfxContext.h"
 +
@@ -4088,16 +4121,32 @@ diff --git a/widget/src/gtk2/nsDragServi
          PRBool needsFallbackIcon = PR_FALSE;
          nsRect dragRect;
          nsPresContext* pc;
 -        nsRefPtr<gfxASurface> surface;
 +        RefPtr<gfxASurface> surface;
          if (mHasImage || mSelection) {
            DrawDrag(aDOMNode, aRegion, mScreenX, mScreenY,
                     &dragRect, getter_AddRefs(surface), &pc);
+@@ -269,13 +271,13 @@ nsDragService::SetAlphaPixmap(gfxASurfac
+     gdk_drawable_set_colormap(GDK_DRAWABLE(pixmap), alphaColormap);
+ 
+     // Make a gfxXlibSurface wrapped around the pixmap to render on
+-    nsRefPtr<gfxASurface> xPixmapSurface =
++    RefPtr<gfxASurface> xPixmapSurface =
+          nsWindow::GetSurfaceForGdkDrawable(GDK_DRAWABLE(pixmap),
+                                             dragRect.Size());
+     if (!xPixmapSurface)
+       return PR_FALSE;
+ 
+-    nsRefPtr<gfxContext> xPixmapCtx = new gfxContext(xPixmapSurface);
++    RefPtr<gfxContext> xPixmapCtx = new gfxContext(xPixmapSurface);
+ 
+     // Clear it...
+     xPixmapCtx->SetOperator(gfxContext::OPERATOR_CLEAR);
 diff --git a/widget/src/gtk2/nsImageToPixbuf.cpp b/widget/src/gtk2/nsImageToPixbuf.cpp
 --- a/widget/src/gtk2/nsImageToPixbuf.cpp
 +++ b/widget/src/gtk2/nsImageToPixbuf.cpp
 @@ -47,6 +47,8 @@
  
  #include "nsImageToPixbuf.h"
  
 +using namespace mozilla;
@@ -4198,30 +4247,63 @@ diff --git a/widget/src/gtk2/nsWindow.cp
                  if (img && !img->CairoStatus()) {
                      img->SetDeviceOffset(gfxPoint(-boundsRect.x, -boundsRect.y));
              
 -                    nsRefPtr<gfxContext> imgCtx = new gfxContext(img);
 +                    RefPtr<gfxContext> imgCtx = new gfxContext(img);
                      if (imgCtx) {
                          imgCtx->SetPattern(pattern);
                          imgCtx->SetOperator(gfxContext::OPERATOR_SOURCE);
+@@ -6204,7 +6206,7 @@ IM_get_input_context(nsWindow *aWindow)
+ 
+ #endif
+ 
+-/* static */ already_AddRefed<gfxASurface>
++/* static */ AddRefed<gfxASurface>
+ nsWindow::GetSurfaceForGdkDrawable(GdkDrawable* aDrawable,
+                                    const nsSize& aSize)
+ {
+@@ -6213,10 +6215,8 @@ nsWindow::GetSurfaceForGdkDrawable(GdkDr
+     Display* xDisplay = gdk_x11_drawable_get_xdisplay(aDrawable);
+     Drawable xDrawable = gdk_x11_drawable_get_xid(aDrawable);
+ 
+-    gfxASurface* result = new gfxXlibSurface(xDisplay, xDrawable, xVisual,
+-                                       gfxIntSize(aSize.width, aSize.height));
+-    NS_IF_ADDREF(result);
+-    return result;
++    return do_AddRef(new gfxXlibSurface(xDisplay, xDrawable, xVisual,
++                                        gfxIntSize(aSize.width, aSize.height)));
+ }
+ 
+ // return the gfxASurface for rendering to this widget
 diff --git a/widget/src/gtk2/nsWindow.h b/widget/src/gtk2/nsWindow.h
 --- a/widget/src/gtk2/nsWindow.h
 +++ b/widget/src/gtk2/nsWindow.h
 @@ -40,9 +40,8 @@
  #ifndef __nsWindow_h__
  #define __nsWindow_h__
  
 -#include "nsAutoPtr.h"
 -
  #include "nsCommonWidget.h"
 +#include "gfxTypes.h"
  
  #include "mozcontainer.h"
  #include "mozdrawingarea.h"
+@@ -367,8 +366,8 @@ public:
+ 
+     gfxASurface       *GetThebesSurface();
+ 
+-    static already_AddRefed<gfxASurface> GetSurfaceForGdkDrawable(GdkDrawable* aDrawable,
+-                                                                  const nsSize& aSize);
++    static mozilla::AddRefed<gfxASurface> GetSurfaceForGdkDrawable(GdkDrawable* aDrawable,
++                                                                   const nsSize& aSize);
+ 
+ #ifdef ACCESSIBILITY
+     static PRBool      sAccessibilityEnabled;
 @@ -404,7 +403,7 @@ private:
      PRInt32             mTransparencyBitmapWidth;
      PRInt32             mTransparencyBitmapHeight;
  
 -    nsRefPtr<gfxASurface> mThebesSurface;
 +    mozilla::RefPtr<gfxASurface> mThebesSurface;
  
  #ifdef ACCESSIBILITY
deleted file mode 100644
--- a/gfx-refcounting2
+++ /dev/null
@@ -1,96 +0,0 @@
-diff --git a/content/canvas/src/nsCanvasRenderingContext2D.cpp b/content/canvas/src/nsCanvasRenderingContext2D.cpp
---- a/content/canvas/src/nsCanvasRenderingContext2D.cpp
-+++ b/content/canvas/src/nsCanvasRenderingContext2D.cpp
-@@ -473,7 +473,7 @@ protected:
-         float globalAlpha;
- 
-         nsString font;
--        nsRefPtr<gfxFontGroup> fontGroup;
-+        RefPtr<gfxFontGroup> fontGroup;
-         TextAlign textAlign;
-         TextBaseline textBaseline;
- 
-diff --git a/layout/base/nsCSSRendering.cpp b/layout/base/nsCSSRendering.cpp
---- a/layout/base/nsCSSRendering.cpp
-+++ b/layout/base/nsCSSRendering.cpp
-@@ -3371,7 +3371,7 @@ nsCSSRendering::PaintBoxShadow(nsPresCon
-     shadowRectPlusBlur.RoundOut();
- 
-     gfxContext* renderContext = aRenderingContext.ThebesContext();
--    nsRefPtr<gfxContext> shadowContext;
-+    RefPtr<gfxContext> shadowContext;
-     nsContextBoxBlur blurringArea;
- 
-     // shadowRect has already been converted to device pixels, pass 1 as the appunits/pixel value
-diff --git a/layout/base/nsCSSRendering.h b/layout/base/nsCSSRendering.h
---- a/layout/base/nsCSSRendering.h
-+++ b/layout/base/nsCSSRendering.h
-@@ -390,8 +390,8 @@ protected:
-                        PRUint32 aTopLobe,
-                        PRUint32 aBottomLobe);
- 
--  nsRefPtr<gfxContext> mContext;
--  nsRefPtr<gfxImageSurface> mImageSurface;
-+  mozilla::RefPtr<gfxContext> mContext;
-+  mozilla::RefPtr<gfxImageSurface> mImageSurface;
-   gfxContext* mDestinationCtx;
- 
-   // Contrary to what is passed as parameters, these are in device pixels
-diff --git a/widget/src/gtk2/nsDragService.cpp b/widget/src/gtk2/nsDragService.cpp
---- a/widget/src/gtk2/nsDragService.cpp
-+++ b/widget/src/gtk2/nsDragService.cpp
-@@ -271,13 +271,13 @@ nsDragService::SetAlphaPixmap(gfxASurfac
-     gdk_drawable_set_colormap(GDK_DRAWABLE(pixmap), alphaColormap);
- 
-     // Make a gfxXlibSurface wrapped around the pixmap to render on
--    nsRefPtr<gfxASurface> xPixmapSurface =
-+    RefPtr<gfxASurface> xPixmapSurface =
-          nsWindow::GetSurfaceForGdkDrawable(GDK_DRAWABLE(pixmap),
-                                             dragRect.Size());
-     if (!xPixmapSurface)
-       return PR_FALSE;
- 
--    nsRefPtr<gfxContext> xPixmapCtx = new gfxContext(xPixmapSurface);
-+    RefPtr<gfxContext> xPixmapCtx = new gfxContext(xPixmapSurface);
- 
-     // Clear it...
-     xPixmapCtx->SetOperator(gfxContext::OPERATOR_CLEAR);
-diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp
---- a/widget/src/gtk2/nsWindow.cpp
-+++ b/widget/src/gtk2/nsWindow.cpp
-@@ -6206,7 +6206,7 @@ IM_get_input_context(nsWindow *aWindow)
- 
- #endif
- 
--/* static */ already_AddRefed<gfxASurface>
-+/* static */ AddRefed<gfxASurface>
- nsWindow::GetSurfaceForGdkDrawable(GdkDrawable* aDrawable,
-                                    const nsSize& aSize)
- {
-@@ -6215,10 +6215,8 @@ nsWindow::GetSurfaceForGdkDrawable(GdkDr
-     Display* xDisplay = gdk_x11_drawable_get_xdisplay(aDrawable);
-     Drawable xDrawable = gdk_x11_drawable_get_xid(aDrawable);
- 
--    gfxASurface* result = new gfxXlibSurface(xDisplay, xDrawable, xVisual,
--                                       gfxIntSize(aSize.width, aSize.height));
--    NS_IF_ADDREF(result);
--    return result;
-+    return do_AddRef(new gfxXlibSurface(xDisplay, xDrawable, xVisual,
-+                                        gfxIntSize(aSize.width, aSize.height)));
- }
- 
- // return the gfxASurface for rendering to this widget
-diff --git a/widget/src/gtk2/nsWindow.h b/widget/src/gtk2/nsWindow.h
---- a/widget/src/gtk2/nsWindow.h
-+++ b/widget/src/gtk2/nsWindow.h
-@@ -366,8 +366,8 @@ public:
- 
-     gfxASurface       *GetThebesSurface();
- 
--    static already_AddRefed<gfxASurface> GetSurfaceForGdkDrawable(GdkDrawable* aDrawable,
--                                                                  const nsSize& aSize);
-+    static mozilla::AddRefed<gfxASurface> GetSurfaceForGdkDrawable(GdkDrawable* aDrawable,
-+                                                                   const nsSize& aSize);
- 
- #ifdef ACCESSIBILITY
-     static PRBool      sAccessibilityEnabled;
deleted file mode 100644
--- a/layout-stack-classes
+++ /dev/null
@@ -1,17 +0,0 @@
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-* * *
-
--- a/series
+++ b/series
@@ -4,28 +4,24 @@ tamarin-remove-extra-auto-storage-specif
 tamarin-const-workitem.patch
 tamarin-gcstack-access
 tamarin-workitems-notgc-noassert
 tamarin-enable-traces
 tamarin-debug-print-finalizers
 tamarin-finalizable-merge-fixup
 tamarin-remove-finalize-method
 tamarin-valgrind-annotations
-tamarin-stack-access2
 tamarin-double-mark-is-ok
 tamarin-uninline-fixedmalloc
 tamarin-gcc43-strict-warnings
 tamarin-bug-427030-v1.patch
 crashrepoter-notparallel
 core-refcounting
 template-hashtable-getters
 gfx-refcounting
-tamarin-bug-427030-v1.patch2
-core-refcounting2
-gfx-refcounting2
 64bit
 nscore-class-annotation-types
 psm-remove-init-isupports
 success-macros.patch
 no-standaloneglue.patch
 prerewrite_fixes.patch
 maybeweak-crap.patch
 remove-cycle
@@ -96,17 +92,16 @@ root-nsIMemory
 input-stream-tee-closesink
 bad-plugin-finalization
 nsWeakRef
 nsListenerStruct
 remove-zeroing-operator-news
 parser-gcobjects
 NS_OBSERVER_ARRAY_NOTIFY_OBSERVERS
 nsXMLContentSink-mContentStack
-content-stack-classes
 nsPresShellIterator
 nsEvent
 nsEventTargetChainItem
 nsEventChainVisitor
 nsContentListKey
 nsSlots
 nsAttrAndChildArray
 root-running-threads
@@ -130,18 +125,16 @@ zipreader-cache
 root-xptimanager
 threadmanager-shutdown-norecreate
 nsScanner-gc
 nsObjectMapEntry
 root-rdfstuff
 nsXHTMLParanoidFragmentSink
 multiple-comptrs
 static-check-gc-attributes
-layout-stack-classes
-editor-stack-classes
 nsRangeStore-okonstack
 accessible-stack-classes
 widget-stack-classes
 psm-stack-classes
 spellcheck-stack-classes
 necko-stack-classes
 securebrowser-cast
 profilemigrator-immortal
--- a/tamarin-bug-427030-v1.patch
+++ b/tamarin-bug-427030-v1.patch
@@ -1,8 +1,10 @@
+* * *
+
 diff --git a/js/tamarin/MMgc/GC.cpp b/js/tamarin/MMgc/GC.cpp
 --- a/js/tamarin/MMgc/GC.cpp
 +++ b/js/tamarin/MMgc/GC.cpp
 @@ -629,6 +629,7 @@ namespace MMgc
  			PushWorkItem(work, item);
  			Mark(work);
  		}
 +		MarkLinks(work);
@@ -29,17 +31,17 @@ diff --git a/js/tamarin/MMgc/GC.cpp b/js
  		}
  		largeAlloc->ClearMarks();
 +	}
 +
 +	void GC::SweepLinks()
 +	{
 +		HardLinks::iterator i = m_hardLinks.begin();
 +		while (i != m_hardLinks.end()) {
-+			void *source = i->first.first;
++			const void *source = i->first.first;
 +			if (!GetMark(source))
 +				m_hardLinks.erase(i++);
 +			else
 +				++i;
 +		}
  	}
  
  	void GC::Finalize()
@@ -60,18 +62,18 @@ diff --git a/js/tamarin/MMgc/GC.cpp b/js
 +
 +	void GC::MarkLinks(GCStack<GCWorkItem> &work)
 +	{
 +		for (;;) {
 +			bool found = false;
 +			for (HardLinks::iterator i = m_hardLinks.begin();
 +			     i != m_hardLinks.end();
 +			     ++i) {
-+				void *source = i->first.first;
-+				void *target = i->first.second;
++				const void *source = i->first.first;
++				const void *target = i->first.second;
 +
 +				GCAssert(i->second != 0);
 +				if (GetMark(source) && !GetMark(target)) {
 +					GCWorkItem item(target, Size(target), true);
 +					PushWorkItem(work, item);
 +					found = true;
 +				}
 +			}
@@ -175,17 +177,17 @@ diff --git a/js/tamarin/MMgc/GC.h b/js/t
  		void MarkItem(GCStack<GCWorkItem> &work)
  		{
 @@ -1442,7 +1455,12 @@ namespace MMgc
  		GCRoot *m_roots;
  		void AddRoot(GCRoot *root);
  		void RemoveRoot(GCRoot *root);
 -		
 +
-+		typedef std::pair<void *, void *> PtrPair;
++		typedef std::pair<const void *, const void *> PtrPair;
 +		typedef std::map<PtrPair, size_t> HardLinks;
 +		/** @access Requires(request && m_lock || exclusiveGC) */
 +		HardLinks m_hardLinks;
 +
  		/**
  		 * Points to the head of a linked list of callback objects.
  		 *
 diff --git a/js/tamarin/MMgc/GCTests.cpp b/js/tamarin/MMgc/GCTests.cpp
deleted file mode 100644
--- a/tamarin-bug-427030-v1.patch2
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/js/tamarin/MMgc/GC.cpp b/js/tamarin/MMgc/GC.cpp
---- a/js/tamarin/MMgc/GC.cpp
-+++ b/js/tamarin/MMgc/GC.cpp
-@@ -877,7 +877,7 @@ bail:
- 	{
- 		HardLinks::iterator i = m_hardLinks.begin();
- 		while (i != m_hardLinks.end()) {
--			void *source = i->first.first;
-+			const void *source = i->first.first;
- 			if (!GetMark(source))
- 				m_hardLinks.erase(i++);
- 			else
-@@ -1322,8 +1322,8 @@ bail:
- 			for (HardLinks::iterator i = m_hardLinks.begin();
- 			     i != m_hardLinks.end();
- 			     ++i) {
--				void *source = i->first.first;
--				void *target = i->first.second;
-+				const void *source = i->first.first;
-+				const void *target = i->first.second;
- 
- 				GCAssert(i->second != 0);
- 				if (GetMark(source) && !GetMark(target)) {
-diff --git a/js/tamarin/MMgc/GC.h b/js/tamarin/MMgc/GC.h
---- a/js/tamarin/MMgc/GC.h
-+++ b/js/tamarin/MMgc/GC.h
-@@ -1456,7 +1456,7 @@ namespace MMgc
- 		void AddRoot(GCRoot *root);
- 		void RemoveRoot(GCRoot *root);
- 
--		typedef std::pair<void *, void *> PtrPair;
-+		typedef std::pair<const void *, const void *> PtrPair;
- 		typedef std::map<PtrPair, size_t> HardLinks;
- 		/** @access Requires(request && m_lock || exclusiveGC) */
- 		HardLinks m_hardLinks;
--- a/tamarin-gcstack-access
+++ b/tamarin-gcstack-access
@@ -1,11 +1,13 @@
-diff -r 7e5bda8b839d js/tamarin/MMgc/GC.cpp
---- a/js/tamarin/MMgc/GC.cpp	Wed Jul 02 13:28:03 2008 -0700
-+++ b/js/tamarin/MMgc/GC.cpp	Wed Jul 02 13:32:45 2008 -0700
+* * *
+
+diff --git a/js/tamarin/MMgc/GC.cpp b/js/tamarin/MMgc/GC.cpp
+--- a/js/tamarin/MMgc/GC.cpp
++++ b/js/tamarin/MMgc/GC.cpp
 @@ -596,6 +596,8 @@ namespace MMgc
  		SAMPLE_CHECK();
  
  		GCStack<GCWorkItem> work;
 +
 +		m_currentQueue = &work;
  		{
  #ifdef GCHEAP_LOCK
@@ -14,48 +16,83 @@ diff -r 7e5bda8b839d js/tamarin/MMgc/GC.
  			Mark(work);
  		}
  		
 +		m_currentQueue = NULL;
 +
  		SAMPLE_CHECK();
  	}
  #endif
-@@ -2633,6 +2637,8 @@ bail:
+@@ -2263,12 +2267,16 @@ bail:
+ #ifdef GCHEAP_LOCK
+ 			GCAcquireSpinlock lock(m_rootListLock);
+ #endif
++			m_currentQueue = &m_incrementalWork;
++
+ 			GCRoot *r = m_roots;
+ 			while(r) {
+ 				GCWorkItem item = r->GetWorkItem();
+ 				MarkItem(item, m_incrementalWork);
+ 				r = r->next;
+ 			}
++
++			m_currentQueue = NULL;
+ 		}
+ 		markTicks += GetPerformanceCounter() - start;
+ 		IncrementalMark();
+@@ -2633,6 +2641,8 @@ bail:
  			return;
  		} 
  
 +		m_currentQueue = &m_incrementalWork;
 +
  #ifdef DEBUGGER
  		StartGCActivity();
  #endif
-@@ -2666,6 +2672,8 @@ bail:
- 
+@@ -2667,6 +2677,8 @@ bail:
  		lastMarkTicks = GetPerformanceCounter();
  		markTicks += lastMarkTicks - start;
+ 
++		m_currentQueue = NULL;
++
+ #ifdef DEBUGGER
+ 		if(GC::gcstats) {
+ 			double millis = duration(start);
+@@ -2695,6 +2707,8 @@ bail:
+ 		// finished in Sweep
+ 		sweepStart = GetPerformanceCounter();
+ 		
++		m_currentQueue = &m_incrementalWork;
++
+ 		// mark roots again, could have changed (alternative is to put WB's on the roots
+ 		// which we may need to do if we find FinishIncrementalMark taking too long)
+ 		
+@@ -2718,6 +2732,8 @@ bail:
+ 			cb->lastmark(m_incrementalWork);
+ 
+ 		MarkQueueAndStack(m_incrementalWork);
 +
 +		m_currentQueue = NULL;
  
- #ifdef DEBUGGER
- 		if(GC::gcstats) {
-diff -r 7e5bda8b839d js/tamarin/MMgc/GC.h
---- a/js/tamarin/MMgc/GC.h	Wed Jul 02 13:28:03 2008 -0700
-+++ b/js/tamarin/MMgc/GC.h	Wed Jul 02 13:32:45 2008 -0700
-@@ -646,6 +646,9 @@ namespace MMgc
+ #ifdef _DEBUG
+ 		// need to traverse all marked objects and make sure they don't contain
+diff --git a/js/tamarin/MMgc/GC.h b/js/tamarin/MMgc/GC.h
+--- a/js/tamarin/MMgc/GC.h
++++ b/js/tamarin/MMgc/GC.h
+@@ -648,6 +648,9 @@ namespace MMgc
  		 */
  		bool incremental;
  
 +		// This member is only available during tracing
 +		GCStack<GCWorkItem> *m_currentQueue;
 +
  		// -- Interface
  		GC(GCHeap *heap);
  		virtual ~GC();
-@@ -1134,8 +1137,7 @@ namespace MMgc
+@@ -1141,8 +1144,7 @@ namespace MMgc
  
  		uintptr	GetStackTop() const;
  
 -		// for deciding a tree of things should be scanned from presweep
 -		void PushWorkItem(const GCWorkItem &item) { PushWorkItem(m_incrementalWork, item); }
 +		void PushWorkItem(const GCWorkItem &item) { PushWorkItem(*m_currentQueue, item); }
  
  	private:
deleted file mode 100644
--- a/tamarin-stack-access2
+++ /dev/null
@@ -1,38 +0,0 @@
-diff -r 804ac8273cce js/tamarin/MMgc/GC.cpp
---- a/js/tamarin/MMgc/GC.cpp	Wed Jul 02 13:38:49 2008 -0700
-+++ b/js/tamarin/MMgc/GC.cpp	Wed Jul 02 13:39:32 2008 -0700
-@@ -2283,12 +2283,16 @@ bail:
- #ifdef GCHEAP_LOCK
- 			GCAcquireSpinlock lock(m_rootListLock);
- #endif
-+			m_currentQueue = &m_incrementalWork;
-+
- 			GCRoot *r = m_roots;
- 			while(r) {
- 				GCWorkItem item = r->GetWorkItem();
- 				MarkItem(item, m_incrementalWork);
- 				r = r->next;
- 			}
-+
-+			m_currentQueue = NULL;
- 		}
- 		markTicks += GetPerformanceCounter() - start;
- 		IncrementalMark();
-@@ -2727,6 +2731,8 @@ bail:
- 		// finished in Sweep
- 		sweepStart = GetPerformanceCounter();
- 		
-+		m_currentQueue = &m_incrementalWork;
-+
- 		// mark roots again, could have changed (alternative is to put WB's on the roots
- 		// which we may need to do if we find FinishIncrementalMark taking too long)
- 		
-@@ -2750,6 +2756,8 @@ bail:
- 			cb->lastmark(m_incrementalWork);
- 
- 		MarkQueueAndStack(m_incrementalWork);
-+
-+		m_currentQueue = NULL;
- 
- #ifdef _DEBUG
- 		// need to traverse all marked objects and make sure they don't contain