[logback-dev] svn commit: r1733 - in logback/trunk: logback-classic/src/main/java/ch/qos/logback/classic/jmx logback-core/src/main/java/ch/qos/logback/core logback-core/src/main/java/ch/qos/logback/core/status logback-core/src/main/java/ch/qos/logback/core/util logback-core/src/test/java/ch/qos/logback/core/joran/action logback-core/src/test/java/ch/qos/logback/core/status

Joern Huxhorn jhuxhorn at googlemail.com
Wed Aug 6 21:06:48 CEST 2008


Hi Ceki,
some comments on the latest commit:

noreply.ceki at qos.ch wrote:
> Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/BasicStatusManager.java
> ==============================================================================
> --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/BasicStatusManager.java	(original)
> +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/BasicStatusManager.java	Wed Aug  6 18:51:10 2008
> @@ -10,25 +10,39 @@
>   
[..]
> +  // This method is synchronized on the instance.
> +  // Code
>    int count = 0;
> -  List<Status> statusList = new ArrayList<Status>();
> +  
> +  // reading SynchronizedCollection the mutex is the returned 
> +  // synchronized list, we make use of this fact in getCopyOfStatusList
> +  List<Status> statusList = Collections
> +      .synchronizedList(new ArrayList<Status>());
>   
statusList should be final if it's later used for synchronization. At 
least that's what IDEA says...

>    int level = Status.INFO;
>  
> -  // This method is synchronized on the instance.
> -  // Code iterating on this.iterator is expected to
> -  // also synchronize on this (the BasicStatusManager instance)
> -  public synchronized void add(Status newStatus) {
> -    // System.out.println(newStatus);
> +  // reading SynchronizedCollection the mutex is the returned 
> +  // synchronized list, we make use of this fact in getCopyOfStatusListnerList
> +  List<StatusListener> statusListenerList = Collections
> +      .synchronizedList(new ArrayList<StatusListener>());
>   
As statusList, statusListenerList should be final.
> +
> +  /**
> +   * Add a new status object.
> +   * 
> +   * @param Status
> +   *                the status message to add
> +   */
> +  public void add(Status newStatus) {
>      if (count > MAX_COUNT) {
>        return;
>      }
> @@ -40,8 +54,10 @@
>      statusList.add(newStatus);
>    }
>  
> -  public Iterator<Status> iterator() {
> -    return statusList.iterator();
> +  public synchronized List<Status> getCopyOfStatusList() {
> +    synchronized (statusList) {
> +      return new ArrayList<Status>(statusList);
> +    }
>    }
>   
I guess the method shouldn't be synchronized anymore since 
synchronization is done on statusList.

[..]
> +  public void remove(StatusListener listener) {
> +    statusListenerList.add(listener);
> +  }
>   
Should be statusListenerList.remove(listener);

Regards,
Joern.



More information about the logback-dev mailing list