Bug 25955 [Workbench] Exiting while saving can cause problems
This seems to be a problem with either the workbench in general or the editor structure in particular. I have reproduced this with the Java editor but there is no reason why it wouldn't occur with other editors as well. Dirty a Java editor. Press Ctrl+S to save the editor. While it is saving, quickly close the main perspective window, either by clicking the X or by choosing File->Save. When prompted to save dirty resources say Okay. An error dialog appears stating that the save failed, and a stack trace is printed to the log (sorry, I don't have my log anymore, but it's fairly easy to reproduce). The dialog says: "Problems occurred while trying to save the state of the workbench." Details: "Save cannot be called from inside an operation." I guess the real problem is that I'm able to exit while a workspace operation is taking place. Reproduced on both Win2K and Linux.
bundles/org.eclipse.ui.workbench/extensions/org/eclipse/jface/window/ApplicationWindow.java
Rectangle clientArea= composite.getClientArea();
	
			Control[] ws= composite.getChildren();
			
			for (int i= 0; i < ws.length; i++) {
				Control w= ws[i];
				
				if (i == 0) { 
					Point e= w.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
					w.setBounds(clientArea.x, clientArea.y, clientArea.width, e.y);
					clientArea.y+= e.y;
					clientArea.height-= e.y;
				} else if (getToolBarControl() == w) { 
					if (toolBarChildrenExist()) {
						Point e= w.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
						w.setBounds(clientArea.x, clientArea.y, clientArea.width, e.y);
						clientArea.y+= e.y + VGAP;
						clientArea.height-= e.y + VGAP;
					} 
				} else if (statusLineManager != null && statusLineManager.getControl() == w) {
					Point e= w.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
					w.setBounds(clientArea.x, clientArea.y+clientArea.height-e.y, clientArea.width, e.y);
					clientArea.height-= e.y + VGAP;
				} else {
					w.setBounds(clientArea.x, clientArea.y + VGAP, clientArea.width, clientArea.height - VGAP);
				}
			}
		}
	}