summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti <silenio>2010-04-28 19:15:26 +0000
committerSilenio Quarti <silenio>2010-04-28 19:15:26 +0000
commitbfbf57612c389a685eb9b7c32e00cd1d6eb1ae70 (patch)
treec592c77d06ec57549b145c3a88e33025a6e85d56
parente7e3498d3014b09475dd237b86515511a1b2959f (diff)
downloadeclipse.platform.swt-bfbf57612c389a685eb9b7c32e00cd1d6eb1ae70.tar.gz
eclipse.platform.swt-bfbf57612c389a685eb9b7c32e00cd1d6eb1ae70.tar.xz
eclipse.platform.swt-bfbf57612c389a685eb9b7c32e00cd1d6eb1ae70.zip
Bug 310707 - [64] printing to file twice crashes
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java21
1 files changed, 14 insertions, 7 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java
index 500df29611..f38df7942f 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java
@@ -327,16 +327,18 @@ public PrinterData open() {
/* Initialize PRINTDLG fields, including DEVMODE. */
pd.Flags = OS.PD_RETURNDEFAULT;
if (OS.PrintDlg(pd)) {
-
+ if (pd.hDevNames != 0) {
+ OS.GlobalFree(pd.hDevNames);
+ pd.hDevNames = 0;
+ }
+
/*
* If user setup info from a previous print dialog was specified,
* then restore the previous DEVMODE struct.
*/
- int /*long*/ lpInitData = 0;
- int /*long*/ hHeap = OS.GetProcessHeap();
byte devmodeData [] = printerData.otherData;
if (devmodeData != null && devmodeData.length != 0) {
- lpInitData = OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, devmodeData.length);
+ int /*long*/ lpInitData = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, devmodeData.length);
OS.MoveMemory(lpInitData, devmodeData, devmodeData.length);
if (pd.hDevMode != 0) OS.GlobalFree(pd.hDevMode);
pd.hDevMode = lpInitData;
@@ -407,7 +409,6 @@ public PrinterData open() {
TCHAR buffer = new TCHAR(0, size);
OS.MoveMemory(buffer, ptr, size);
OS.GlobalUnlock(hMem);
- if (pd.hDevNames != 0) OS.GlobalFree(pd.hDevNames);
int driverOffset = offsets[0];
int i = 0;
@@ -460,11 +461,17 @@ public PrinterData open() {
data.orientation = dmOrientation == OS.DMORIENT_LANDSCAPE ? PrinterData.LANDSCAPE : PrinterData.PORTRAIT;
}
OS.GlobalUnlock(hMem);
- if (pd.hDevMode != 0) OS.GlobalFree(pd.hDevMode);
- if (lpInitData != 0) OS.HeapFree(hHeap, 0, lpInitData);
printerData = data;
}
}
+ if (pd.hDevNames != 0) {
+ OS.GlobalFree(pd.hDevNames);
+ pd.hDevNames = 0;
+ }
+ if (pd.hDevMode != 0) {
+ OS.GlobalFree(pd.hDevMode);
+ pd.hDevMode = 0;
+ }
/* Destroy the BIDI orientation window */
if (hwndParent != hwndOwner) {
if (enabled) OS.EnableWindow (hwndParent, true);