--- old/src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java 2015-01-28 17:22:28.000000000 +0300 +++ new/src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java 2015-01-28 17:22:28.000000000 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,8 +43,6 @@ import java.awt.image.Raster; import java.awt.image.WritableRaster; -import java.awt.image.SampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.image.ColorModel; import java.awt.image.IndexColorModel; @@ -1048,7 +1046,13 @@ // Call the writer, who will call back for every scanline - processImageStarted(currentImage); + clearAbortRequest(); + cbLock.lock(); + try { + processImageStarted(currentImage); + } finally { + cbLock.unlock(); + } boolean aborted = false; @@ -1225,6 +1229,23 @@ } } + @Override + protected synchronized void clearAbortRequest() { + setThreadLock(); + try { + cbLock.check(); + if (abortRequested()) { + super.clearAbortRequest(); + // reset C structures + resetWriter(structPointer); + // reset the native destination + setDest(structPointer); + } + } finally { + clearThreadLock(); + } + } + private void resetInternalState() { // reset C structures resetWriter(structPointer);