You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2006/11/15 00:03:40 UTC

svn commit: r475041 - /logging/log4j/trunk/src/java/org/apache/log4j/Category.java

Author: carnold
Date: Tue Nov 14 15:03:40 2006
New Revision: 475041

URL: http://svn.apache.org/viewvc?view=rev&rev=475041
Log:
Bug 35748: Use of read/write lock acquistition not necessaryily safe in Category

Modified:
    logging/log4j/trunk/src/java/org/apache/log4j/Category.java

Modified: logging/log4j/trunk/src/java/org/apache/log4j/Category.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/java/org/apache/log4j/Category.java?view=diff&rev=475041&r1=475040&r2=475041
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/Category.java (original)
+++ logging/log4j/trunk/src/java/org/apache/log4j/Category.java Tue Nov 14 15:03:40 2006
@@ -161,13 +161,14 @@
   public void addAppender(Appender newAppender) {
     // BEGIN - WRITE LOCK
     lock.getWriteLock();
-
+    try {
     if (aai == null) {
       aai = new AppenderAttachableImpl();
     }
-
     aai.addAppender(newAppender);
+    } finally {
     lock.releaseWriteLock();
+    }
     //	END - WRITE LOCK
 
     repository.fireAddAppenderEvent((Logger) this, newAppender);
@@ -209,17 +210,17 @@
     int writes = 0;
 
     for (Category c = this; c != null; c = c.parent) {
-      try {
   	  	// Protect against simultaneous writes operations such as 
 	   	  // addAppender, removeAppender,...
         c.lock.getReadLock();
-
+    	try {
         if (c.aai != null) {
           writes += c.aai.appendLoopOnAppenders(event);
         }
 	     } finally {
 			   c.lock.releaseReadLock();
 			 }
+	    
        if (!c.additive) {
          break;
        }      
@@ -604,12 +605,15 @@
   public Enumeration getAllAppenders() {
 	  Enumeration result;
   	lock.getReadLock();
+    try {
     if (aai == null) {
       result = NullEnumeration.getInstance();
     } else {
       result = aai.getAllAppenders();
     }
+    } finally {
     lock.releaseReadLock();
+    }
     return result;
   }
 
@@ -625,12 +629,15 @@
   	Appender result;
   	
   	lock.getReadLock();
+  	try {
     if ((aai == null) || (name == null)) {
       result = null;
     } else {	
 	    result = aai.getAppender(name);
     }	  
+  	} finally {
 	  lock.releaseReadLock();
+  	}
 	
     return result;
   }
@@ -941,14 +948,16 @@
   	boolean result;
 
     lock.getReadLock();
-    
+    try {
     if ((appender == null) || (aai == null)) {
       result = false;
     } else {
       result = aai.isAttached(appender);
     }
+    } finally {
+    	lock.releaseReadLock();
+    }
     
-    lock.releaseReadLock();
     return result;
   }
 
@@ -1186,13 +1195,15 @@
    */
   public void removeAllAppenders() {
     lock.getWriteLock();
-    
+    try {
     if (aai != null) {
       aai.removeAllAppenders();
       aai = null;
     }
+    } finally {
     lock.releaseWriteLock();
   }
+  }
 
   /**
    * Remove the appender passed as parameter form the list of appenders.
@@ -1203,14 +1214,16 @@
    */
   public void removeAppender(Appender appender) {
 	  lock.getWriteLock();
-    
+	  try {
     if ((appender == null) || (aai == null)) {
       // Nothing to do
     } else {
   		aai.removeAppender(appender);
     }
+	  } finally {
     lock.releaseWriteLock();
   }
+  }
 
   /**
    * Remove the appender with the name passed as parameter form the list of
@@ -1222,13 +1235,15 @@
    */
   public void removeAppender(String name) {
 	  lock.getWriteLock();
-	  
+	  try {
     if ((name == null) || (aai == null)) {
       // nothing to do
     } else {
       aai.removeAppender(name);
     }
+	  } finally {
     lock.releaseWriteLock();
+  }
   }
 
   /**



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