You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2009/11/17 18:35:57 UTC
svn commit: r881396 - /tomcat/trunk/java/org/apache/juli/FileHandler.java
Author: fhanik
Date: Tue Nov 17 17:35:57 2009
New Revision: 881396
URL: http://svn.apache.org/viewvc?rev=881396&view=rev
Log:
Make the file handler thread safe
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=881396&r1=881395&r2=881396&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/FileHandler.java (original)
+++ tomcat/trunk/java/org/apache/juli/FileHandler.java Tue Nov 17 17:35:57 2009
@@ -95,7 +95,7 @@
/**
* The PrintWriter to which we are currently logging, if any.
*/
- private PrintWriter writer = null;
+ private volatile PrintWriter writer = null;
/**
* Log buffer size
@@ -143,6 +143,7 @@
}
try {
+ PrintWriter writer = this.writer;
if (writer!=null) {
writer.write(result);
} else {
@@ -170,6 +171,8 @@
protected void closeWriter() {
try {
+ PrintWriter writer = this.writer;
+ this.writer = null;
if (writer == null)
return;
writer.write(getFormatter().getTail(this));
@@ -191,6 +194,9 @@
public void flush() {
try {
+ PrintWriter writer = this.writer;
+ if (writer==null)
+ return;
writer.flush();
} catch (Exception e) {
reportError(null, e, ErrorManager.FLUSH_FAILURE);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r881396 - /tomcat/trunk/java/org/apache/juli/FileHandler.java
Posted by sebb <se...@gmail.com>.
On 17/11/2009, fhanik@apache.org <fh...@apache.org> wrote:
> Author: fhanik
> Date: Tue Nov 17 17:35:57 2009
> New Revision: 881396
>
> URL: http://svn.apache.org/viewvc?rev=881396&view=rev
> Log:
> Make the file handler thread safe
If only - there are several other mutable instance fields that are not
synchronized.
AFAICT access to the PrintWriter is not thread-safe - for example, the
openWriter() method has a window whereby the publish() method can
write a log record before the header has been written.
>
> 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=881396&r1=881395&r2=881396&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/juli/FileHandler.java (original)
> +++ tomcat/trunk/java/org/apache/juli/FileHandler.java Tue Nov 17 17:35:57 2009
> @@ -95,7 +95,7 @@
> /**
> * The PrintWriter to which we are currently logging, if any.
> */
> - private PrintWriter writer = null;
> + private volatile PrintWriter writer = null;
>
> /**
> * Log buffer size
> @@ -143,6 +143,7 @@
> }
>
> try {
> + PrintWriter writer = this.writer;
> if (writer!=null) {
> writer.write(result);
> } else {
> @@ -170,6 +171,8 @@
> protected void closeWriter() {
>
> try {
> + PrintWriter writer = this.writer;
> + this.writer = null;
> if (writer == null)
> return;
> writer.write(getFormatter().getTail(this));
> @@ -191,6 +194,9 @@
> public void flush() {
>
> try {
> + PrintWriter writer = this.writer;
> + if (writer==null)
> + return;
> writer.flush();
> } catch (Exception e) {
> reportError(null, e, ErrorManager.FLUSH_FAILURE);
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org