[jbosstools-issues] [JBoss JIRA] (JBIDE-10229) org.jboss.tools.jst.css.dialog.ImageSelectionDialog has GC leaks logik
Vitali Yemialyanchyk (Created) (JIRA)
jira-events at lists.jboss.org
Wed Nov 23 08:59:40 EST 2011
org.jboss.tools.jst.css.dialog.ImageSelectionDialog has GC leaks logik
----------------------------------------------------------------------
Key: JBIDE-10229
URL: https://issues.jboss.org/browse/JBIDE-10229
Project: Tools (JBoss Tools)
Issue Type: Sub-task
Components: common/jst/core
Affects Versions: 3.3.0.M4
Reporter: Vitali Yemialyanchyk
Assignee: Alexey Kazakov
{code}
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
GC gc = new GC(canvas); <-------------------------- here you create GC
gc.setForeground(emptyColor);
gc.fillRectangle(1, 1, canvas.getSize().x - 2, canvas.getSize().y - 2);
// resolution.setText("");
resolution.setVisible(false);
if (file != null) { <-------------------------- here you check condition
Cursor parentCursor = getShell().getCursor();
final Cursor waitCursor = new Cursor(getShell().getDisplay(), SWT.CURSOR_WAIT);
Point previewPoint = new Point(0, 0);
Point labelPoint = canvas.getSize();
InputStream stream = null;
try {
getShell().setCursor(waitCursor);
stream = new FileInputStream(file.getLocation().toOSString());
ImageData imageData = new ImageData(stream);
stream.close();
if (imageData != null) {
Image image = new Image(getShell().getDisplay(), imageData);
// set image in center
Point imagePoint = new Point(image.getBounds().width,
image.getBounds().height);
String imageInfo = imagePoint.x + " x " + imagePoint.y + " px"; //$NON-NLS-1$ //$NON-NLS-2$
// change resolution if image anymore image label
if ((imagePoint.x > labelPoint.x) || (imagePoint.y > labelPoint.y)) {
float ratioImage = (float) imagePoint.x / (float) imagePoint.y;
if (((imagePoint.y > labelPoint.y) &&
((labelPoint.y * ratioImage) > labelPoint.x)) ||
((imagePoint.x > labelPoint.x) &&
((labelPoint.x / ratioImage) < labelPoint.y))) {
imageData = imageData.scaledTo(labelPoint.x - 10,
(int) (labelPoint.x / ratioImage));
} else {
imageData = imageData.scaledTo((int) (labelPoint.y * ratioImage) -
10, labelPoint.y);
}
image.dispose();
image = new Image(getShell().getDisplay(), imageData);
imagePoint.x = image.getBounds().width;
imagePoint.y = image.getBounds().height;
}
previewPoint.x = (labelPoint.x / 2) - (imagePoint.x / 2);
previewPoint.y = (labelPoint.y / 2) - (imagePoint.y / 2);
gc.drawImage(image, previewPoint.x, previewPoint.y);
resolution.setVisible(true);
resolution.setText(imageInfo);
image.dispose();
gc.dispose(); <-------------------------- here you dispose
}
} catch (IOException ev) {
//ignore
} catch (SWTException ex) {
//ignore (if select not image file)
} finally {
getShell().setCursor(parentCursor);
if (stream != null) {
try {
stream.close();
} catch (IOException e1) {
// ignore
}
}
}
}
}
});
{code}
here is absolutely invalid logic, guys :)
you close the stream in two places - try to find: stream.close();
I've check a history of changes:
>>>
PMD violations fixed.
InputStreams close() added where it was possible.
>>>
8/29/08 - someone try to close all streams where it possible, after that all of you respect his authority and afraid to fix his error...
btw., you are still has a problems with "close of all streams", after 8/29/08 changes...
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jbosstools-issues
mailing list