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