You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2010/03/04 01:46:44 UTC

svn commit: r918799 - /tomcat/trunk/java/org/apache/juli/FileHandler.java

Author: kkolinko
Date: Thu Mar  4 00:46:44 2010
New Revision: 918799

URL: http://svn.apache.org/viewvc?rev=918799&view=rev
Log:
Followup to r918594
Be more strict with try/finally when locking

Modified:
    tomcat/trunk/java/org/apache/juli/FileHandler.java

Modified: tomcat/trunk/java/org/apache/juli/FileHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/FileHandler.java?rev=918799&r1=918798&r2=918799&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/FileHandler.java (original)
+++ tomcat/trunk/java/org/apache/juli/FileHandler.java Thu Mar  4 00:46:44 2010
@@ -138,39 +138,43 @@
             // Update to writeLock before we switch
             writerLock.readLock().unlock();
             writerLock.writeLock().lock();
-            // Make sure another thread hasn't already done this
-            if (!date.equals(tsDate)) {
-                closeWriter();
-                date = tsDate;
-                openWriter();
-            }
-            // Down grade to read-lock. This ensures the writer remains valid
-            // until the log message is written
-            writerLock.readLock().lock();
-            writerLock.writeLock().unlock();
+            try {
+                // Make sure another thread hasn't already done this
+                if (!date.equals(tsDate)) {
+                    closeWriter();
+                    date = tsDate;
+                    openWriter();
+                }
+                // Down grade to read-lock. This ensures the writer remains valid
+                // until the log message is written
+                writerLock.readLock().lock();
+            } finally {
+                writerLock.writeLock().unlock();
+            }
         }
 
-        String result = null;
-        try {
-            result = getFormatter().format(record);
-        } catch (Exception e) {
-            reportError(null, e, ErrorManager.FORMAT_FAILURE);
-            writerLock.readLock().unlock();
-            return;
-        }
-        
         try {
-            if (writer!=null) {
-                writer.write(result);
-                if (bufferSize < 0) {
-                    writer.flush();
+            String result = null;
+            try {
+                result = getFormatter().format(record);
+            } catch (Exception e) {
+                reportError(null, e, ErrorManager.FORMAT_FAILURE);
+                return;
+            }
+
+            try {
+                if (writer!=null) {
+                    writer.write(result);
+                    if (bufferSize < 0) {
+                        writer.flush();
+                    }
+                } else {
+                    reportError("FileHandler is closed or not yet initialized, unable to log ["+result+"]", null, ErrorManager.WRITE_FAILURE);
                 }
-            } else {
-                reportError("FileHandler is closed or not yet initialized, unable to log ["+result+"]", null, ErrorManager.WRITE_FAILURE);
+            } catch (Exception e) {
+                reportError(null, e, ErrorManager.WRITE_FAILURE);
+                return;
             }
-        } catch (Exception e) {
-            reportError(null, e, ErrorManager.WRITE_FAILURE);
-            return;
         } finally {
             writerLock.readLock().unlock();
         }
@@ -190,8 +194,8 @@
 
     protected void closeWriter() {
         
+        writerLock.writeLock().lock();
         try {
-            writerLock.writeLock().lock();
             if (writer == null)
                 return;
             writer.write(getFormatter().getTail(this));
@@ -213,8 +217,8 @@
     @Override
     public void flush() {
 
+        writerLock.readLock().lock();
         try {
-            writerLock.readLock().lock();
             if (writer == null)
                 return;
             writer.flush();
@@ -319,13 +323,13 @@
         dir.mkdirs();
 
         // Open the current log file
+        writerLock.writeLock().lock();
         try {
             String pathname = dir.getAbsolutePath() + File.separator +
                 prefix + date + suffix;
             String encoding = getEncoding();
             FileOutputStream fos = new FileOutputStream(pathname, true);
             OutputStream os = bufferSize>0?new BufferedOutputStream(fos,bufferSize):fos;
-            writerLock.writeLock().lock();
             writer = new PrintWriter(
                     (encoding != null) ? new OutputStreamWriter(os, encoding)
                                        : new OutputStreamWriter(os), false);



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org