moved allocation of OS resource from GCData back to GC
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
index 9ca111c..603af72 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
@@ -148,6 +148,9 @@
 	/* Free resources */
 	int clipRgn = data.clipRgn;
 	if (clipRgn != 0) OS.DisposeRgn(clipRgn);
+
+	clipRgn = data.saveClip;
+	if (clipRgn != 0) OS.DisposeRgn(clipRgn);
 		
 	Image image = data.image;
 	if (image != null) image.memGC = null;
@@ -156,6 +159,7 @@
 	drawable.internal_dispose_GC(handle, data);
 
 	data.clipRgn = 0;
+	data.saveClip = 0;
 	data.font = null;
 	drawable = null;
 	data.device = null;
@@ -2068,6 +2072,8 @@
 			OS.QDSetPatternOrigin(p);
 		}
 		// save clip region
+		if (data.saveClip == 0)
+			data.saveClip= OS.NewRgn();
 		OS.GetClip(data.saveClip);
 		
 		// calculate new clip based on the Control's bound and GC clipping region
@@ -2121,7 +2127,8 @@
 		
 		if (doClip) {
 			// restore clipping and origin of port
-			OS.SetClip(data.saveClip);
+			if (data.saveClip != 0)
+				OS.SetClip(data.saveClip);
 			OS.SetOrigin((short)0, (short)0);
 		}
 		
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GCData.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GCData.java
index 566cf73..488b412 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GCData.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GCData.java
@@ -37,7 +37,7 @@
 	public boolean clipAgainstChildren= true;
 	public int[] savePort= new int[1];
 	public int[] saveGWorld= new int[1];
-	public int saveClip= OS.NewRgn();
+	public int saveClip;
 	public boolean isFocused= false;
 	public int lineWidth= 1;
 	public boolean xorMode= false;