File tree Expand file tree Collapse file tree
bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -159,9 +159,20 @@ InternalImageHandle getOrCreate(int zoom, Supplier<DestroyableImageHandle> creat
159159 return imageHandle ;
160160 }
161161
162- imageHandle = creator .get ();
163- zoomLevelToImageHandle .put (zoom , imageHandle );
164- return imageHandle ;
162+ synchronized (zoomLevelToImageHandle ) {
163+ imageHandle = (DestroyableImageHandle ) get (zoom );
164+ if (imageHandle == null ) {
165+ imageHandle = creator .get ();
166+ zoomLevelToImageHandle .put (zoom , imageHandle );
167+ }
168+ return imageHandle ;
169+ }
170+ }
171+
172+ <T > T runSynchronized (Supplier <T > supplier ) {
173+ synchronized (zoomLevelToImageHandle ) {
174+ return supplier .get ();
175+ }
165176 }
166177
167178 boolean contains (int zoom ) {
@@ -1388,7 +1399,13 @@ public ImageData getImageData (int zoom) {
13881399 return imageHandle .getImageData ();
13891400 }
13901401
1391- return this .imageProvider .newImageData (zoom );
1402+ return imageHandleManager .runSynchronized (() -> {
1403+ InternalImageHandle obtainedImageHandle = imageHandleManager .get (zoom );
1404+ if (obtainedImageHandle != null ) {
1405+ return obtainedImageHandle .getImageData ();
1406+ }
1407+ return this .imageProvider .newImageData (zoom );
1408+ });
13921409}
13931410
13941411/**
You can’t perform that action at this time.
0 commit comments