diff options
author | Silenio Quarti <silenio> | 2010-04-28 19:15:26 +0000 |
---|---|---|
committer | Silenio Quarti <silenio> | 2010-04-28 19:15:26 +0000 |
commit | bfbf57612c389a685eb9b7c32e00cd1d6eb1ae70 (patch) | |
tree | c592c77d06ec57549b145c3a88e33025a6e85d56 | |
parent | e7e3498d3014b09475dd237b86515511a1b2959f (diff) | |
download | eclipse.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-x | bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java | 21 |
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); |