[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [udig-devel] Re: Tile and LayerGeneratedGlyphDecorator locking up
|
I believe this is my code. Jody, the disposeSWTImage() method only
disposes of the image if it is not null. I'm not sure why this would be
locking in Linux only (that seems very odd). Unfortunately I don't have
a version of Linux to test this with either.
Graham.
Emily Gouge wrote:
I don't remember writing this code but I think maybe Graham and I
worked on it together.
Looking a little further this may be a locking issue. Inside the
disposeSWTImage() function is the following code:
synchronized (SWTLock) {
if (swtImage != null) {
swtImage.dispose();
swtImage = null;
}
}
So I suspect that it's getting hung up waiting for SWTLock, but I have
no idea why. The only other place when this lock is used is in the
createSWTImage function...
synchronized (SWTLock) {
// if the SWTImage is created once the lock is gained, exit
if (swtImage != null && !swtImage.isDisposed()) {
return;
}
// otherwise try creating the SWTImage now
try {
BufferedImage buffImage = getBufferedImage();
swtImage = AWTSWTImageUtils.createSWTImage(buffImage, false);
} catch (Exception ex) {
ex.printStackTrace();
}
}
I don't have a linux version to investigate this further.
Emily
Jody Garnett wrote:
So here are some more data points...
Great detective work.
try {
- boolean notifyIcon = refreshIcon(layer);
+ boolean notifyIcon = true;
boolean notifyLabel = refreshLabel(layer);
And voila, no more lock ups! Well, until it happened again so traced
back again and did the following...
#P net.refractions.udig.project
Index: src/net/refractions/udig/project/render/Tile.java
===================================================================
--- src/net/refractions/udig/project/render/Tile.java (revision
31218)
+++ src/net/refractions/udig/project/render/Tile.java (working copy)
@@ -147,7 +147,7 @@
// System.out.println((msg.getNewIntValue() ==
IRenderer.DONE) + "; state = done");
if( swtImage == null ||
msg.getNewIntValue()==IRenderer.DONE){
//we only care about done events
- disposeSWTImage();
+// disposeSWTImage();
}
}
}
Which has "cured" the lock up problem so far. Obviously this really
isn't a proper fix, but it is allowing me to make progress on my
prototype.
This last one looks suspicions to me; I would only try displosing the
image if it was != null for example :-)
Emily - this is your Tile code am I reading it correct?
It appears as if we are leaking SWT images; and the linux
implementation is calling our bluff and making us wait
Jody
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel
--
Graham Davis
Refractions Research Inc.
gdavis@xxxxxxxxxxxxxxx