dflorey     2004/08/09 08:02:18

  Modified:    webdavclient/clientlib/src/java/org/apache/webdav/lib
                        NotificationListener.java
  Log:
  Added synchronization
  
  Revision  Changes    Path
  1.7       +34 -30    
jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/NotificationListener.java
  
  Index: NotificationListener.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/NotificationListener.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- NotificationListener.java 9 Aug 2004 10:03:52 -0000       1.6
  +++ NotificationListener.java 9 Aug 2004 15:02:18 -0000       1.7
  @@ -190,7 +190,9 @@
                   String subscriptionId = 
subscribeMethod.getResponseHeader(SubscribeMethod.H_SUBSCRIPTION_ID).getValue();
                   logger.log(Level.INFO, "Received subscription 
id="+subscriptionId+", listener: "+listener);
                   int id = Integer.valueOf(subscriptionId).intValue();
  -                subscribers.add(new Subscription(id, uri, listener));
  +                synchronized ( subscribers ) {
  +                    subscribers.add(new Subscription(id, uri, listener));
  +                }
                   if ( subscribersAsString == null ) {
                       subscribersAsString = String.valueOf(id);
                   } else {
  @@ -208,30 +210,32 @@
   
       public boolean unsubscribe(String uri, Subscriber listener, Credentials 
credentials) {
           UnsubscribeMethod unsubscribeMethod = new 
UnsubscribeMethod(repositoryDomain+uri);
  -             for ( Iterator i = subscribers.iterator(); i.hasNext(); ) {
  -                     Subscription subscription = (Subscription)i.next();
  -                     if ( subscription.getSubscriber().equals(listener) ) {
  -                             String id = String.valueOf(subscription.getId());
  -                             
unsubscribeMethod.addRequestHeader(UnsubscribeMethod.H_SUBSCRIPTION_ID, id);
  -                             try {
  -                                     unsubscribeMethod.setDoAuthentication(true);
  -                                     HttpState httpState = new HttpState();
  -                                     httpState.setCredentials(null, repositoryHost, 
credentials);
  -                         HttpConnection httpConnection = new 
HttpConnection(repositoryHost, repositoryPort, protocol);
  -                         httpConnection.setConnectionTimeout(CONNECTION_TIMEOUT);
  -                                     int state = 
unsubscribeMethod.execute(httpState, httpConnection);
  -                                     if ( state == HttpStatus.SC_OK ) {
  -                                             i.remove();
  -                                             return true;
  -                                     } else {
  -                                             logger.log(Level.SEVERE, 
"Unsubscription failed. State: "+state);
  -                                     }
  -                             } catch (IOException e) {
  -                                     logger.log(Level.SEVERE, "Unsubscription of 
listener '"+listener+"' failed!", e);
  -                             }
  -                     }
  -             }
  -             logger.log(Level.SEVERE, "Listener not unsubscribed!");
  +        synchronized ( subscribers ) {
  +            for ( Iterator i = subscribers.iterator(); i.hasNext(); ) {
  +                Subscription subscription = (Subscription)i.next();
  +                if ( subscription.getSubscriber().equals(listener) ) {
  +                    String id = String.valueOf(subscription.getId());
  +                    
unsubscribeMethod.addRequestHeader(UnsubscribeMethod.H_SUBSCRIPTION_ID, id);
  +                    try {
  +                        unsubscribeMethod.setDoAuthentication(true);
  +                        HttpState httpState = new HttpState();
  +                        httpState.setCredentials(null, repositoryHost, credentials);
  +                        HttpConnection httpConnection = new 
HttpConnection(repositoryHost, repositoryPort, protocol);
  +                        httpConnection.setConnectionTimeout(CONNECTION_TIMEOUT);
  +                        int state = unsubscribeMethod.execute(httpState, 
httpConnection);
  +                        if ( state == HttpStatus.SC_OK ) {
  +                            i.remove();
  +                            return true;
  +                        } else {
  +                            logger.log(Level.SEVERE, "Unsubscription failed. State: 
"+state);
  +                        }
  +                    } catch (IOException e) {
  +                        logger.log(Level.SEVERE, "Unsubscription of listener 
'"+listener+"' failed!", e);
  +                    }
  +                }
  +            }
  +        }
  +        logger.log(Level.SEVERE, "Listener not unsubscribed!");
                return false;
       }
   
  @@ -306,10 +310,10 @@
               }
           }
       }
  -
  +    
       private boolean isRegistered(int id) {
           for ( Iterator i = subscribers.iterator(); i.hasNext(); ) {
  -             Subscription subscription = (Subscription)i.next();
  +            Subscription subscription = (Subscription)i.next();
               if ( subscription.getId() == id ) return true;
           }
           return false;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to