Browse Source

FOP-2874: Conserve memory policy fails in multi-threaded environment

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1863625 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-2_4
Simon Steiner 4 years ago
parent
commit
7c3a62ee56

+ 2
- 2
fop-core/src/main/java/org/apache/fop/area/CachedRenderPagesModel.java View File

try { try {
// save page to cache // save page to cache
ObjectOutputStream tempstream; ObjectOutputStream tempstream;
String fname = "fop-page-" + page.getPageIndex() + ".ser";
URI tempURI = tempBaseURI.resolve(fname);
String fname = "/fop-page-" + page.getPageIndex() + ".ser";
URI tempURI = URI.create(tempBaseURI + fname);
OutputStream outStream = renderer.getUserAgent().getResourceResolver().getOutputStream(tempURI); OutputStream outStream = renderer.getUserAgent().getResourceResolver().getOutputStream(tempURI);
tempstream = new ObjectOutputStream(new BufferedOutputStream(outStream)); tempstream = new ObjectOutputStream(new BufferedOutputStream(outStream));
try { try {

+ 25
- 3
fop-core/src/test/java/org/apache/fop/render/ConserveMemoryTestCase.java View File

import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;


import javax.xml.transform.Result; import javax.xml.transform.Result;
import javax.xml.transform.Source; import javax.xml.transform.Source;


public class ConserveMemoryTestCase { public class ConserveMemoryTestCase {
@Test @Test
public void testLink() throws TransformerException, SAXException {
String fo = "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n"
public void testLink() throws Throwable {
final String fo = "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n"
+ " <fo:layout-master-set>\n" + " <fo:layout-master-set>\n"
+ " <fo:simple-page-master master-name=\"simple\" page-height=\"27.9cm\" page-width=\"21.6cm\">\n" + " <fo:simple-page-master master-name=\"simple\" page-height=\"27.9cm\" page-width=\"21.6cm\">\n"
+ " <fo:region-body />\n" + " <fo:region-body />\n"
+ " </fo:flow>\n" + " </fo:flow>\n"
+ " </fo:page-sequence>\n" + " </fo:page-sequence>\n"
+ "</fo:root>"; + "</fo:root>";
foToOutput(fo);

ExecutorService es = Executors.newCachedThreadPool();
final Throwable[] ex = new Throwable[1];
for (int i = 0; i < 5; i++) {
Runnable thread = new Runnable() {
public void run() {
try {
foToOutput(fo);
} catch (Throwable e) {
ex[0] = e;
}
}
};
es.execute(thread);
}
es.shutdown();
es.awaitTermination(1, TimeUnit.MINUTES);
if (ex[0] != null) {
throw ex[0];
}
} }


private void foToOutput(String fo) throws SAXException, TransformerException { private void foToOutput(String fo) throws SAXException, TransformerException {

Loading…
Cancel
Save