Author: cmailleux
Date: Mon Sep 17 10:02:40 2007
New Revision: 18510

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18510&repname=
=3Djahia
Log:
Avoid deadlock under load

Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaT=
ools.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/utils/JahiaTools.java&rev=3D18510&repname=
=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava Mon Sep 17 10:02:40 2007
@@ -32,6 +32,9 @@
 import org.apache.commons.jexl.ExpressionFactory;
 import org.apache.commons.jexl.JexlContext;
 import org.apache.commons.jexl.JexlHelper;
+import org.apache.commons.io.output.DeferredFileOutputStream;
+import org.apache.commons.io.FileCleaner;
+import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 import org.jahia.bin.Jahia;
 import org.jahia.params.ProcessingContext;
@@ -1317,14 +1320,23 @@
                 if (locationHeader !=3D null) {
                     redirectLocation =3D locationHeader.getValue();
                     url =3D new URL(redirectLocation);
+                    method.releaseConnection();
                     logger.info("Redirection to a different host ["+url +"=
]");
                 } else {
+                    method.releaseConnection();
                     throw new IOException("No HTTP location Header in redi=
rect send by request to ["+url +"]. HTTP status code ["+result+"]");
                 }
             } else if (result !=3D HttpStatus.SC_OK) {
+                method.releaseConnection();
                 throw new IOException("Unsupported HTTP status code ["+res=
ult+" i.e. "+method.getStatusText()+"] for request to ["+url +"].");
             } else {
-                return method.getResponseBodyAsStream();
+                DeferredFileOutputStream dfos =3D
+                        new DeferredFileOutputStream(1024 * 1024 * 10, Fil=
e.createTempFile("temp", "httpclient"));
+                InputStream inputStream =3D new BufferedInputStream(new Fi=
leInputStream(dfos.getFile()));
+                FileCleaner.track(dfos.getFile(), inputStream);
+                IOUtils.copy(method.getResponseBodyAsStream(), dfos);
+                method.releaseConnection();
+                return inputStream;
             }
         }
 =


_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to