You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by im...@apache.org on 2004/08/26 18:36:41 UTC

cvs commit: jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider AbstractFileProvider.java AbstractFileSystem.java AbstractLayeredFileProvider.java AbstractOriginatingFileProvider.java

imario      2004/08/26 09:36:41

  Modified:    vfs/src/java/org/apache/commons/vfs/provider
                        AbstractFileProvider.java AbstractFileSystem.java
                        AbstractLayeredFileProvider.java
                        AbstractOriginatingFileProvider.java
  Log:
  first steps to make vfs more thread-safe
  
  Revision  Changes    Path
  1.15      +33 -18    jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java
  
  Index: AbstractFileProvider.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- AbstractFileProvider.java	9 Jul 2004 21:02:51 -0000	1.14
  +++ AbstractFileProvider.java	26 Aug 2004 16:36:41 -0000	1.15
  @@ -52,8 +52,11 @@
        */
       public void close()
       {
  -        fileSystems.clear();
  -        super.close();
  +        synchronized (fileSystems)
  +        {
  +            fileSystems.clear();
  +            super.close();
  +        }
       }
   
       /**
  @@ -73,12 +76,15 @@
       protected void addFileSystem(final Comparable key, final FileSystem fs)
           throws FileSystemException
       {
  -        // Add to the cache
  -        addComponent(fs);
  +        synchronized (fileSystems)
  +        {
  +            // Add to the cache
  +            addComponent(fs);
   
  -        FileSystemKey treeKey = new FileSystemKey(key, fs.getFileSystemOptions());
  -        ((AbstractFileSystem) fs).setCacheKey(treeKey);
  -        fileSystems.put(treeKey, fs);
  +            FileSystemKey treeKey = new FileSystemKey(key, fs.getFileSystemOptions());
  +            ((AbstractFileSystem) fs).setCacheKey(treeKey);
  +            fileSystems.put(treeKey, fs);
  +        }
       }
   
       /**
  @@ -88,9 +94,12 @@
        */
       protected FileSystem findFileSystem(final Comparable key, final FileSystemOptions fileSystemProps)
       {
  -        FileSystemKey treeKey = new FileSystemKey(key, fileSystemProps);
  +        synchronized (fileSystems)
  +        {
  +            FileSystemKey treeKey = new FileSystemKey(key, fileSystemProps);
   
  -        return (FileSystem) fileSystems.get(treeKey);
  +            return (FileSystem) fileSystems.get(treeKey);
  +        }
       }
   
       public FileSystemConfigBuilder getConfigBuilder()
  @@ -100,23 +109,29 @@
   
       public void freeUnusedResources()
       {
  -        Iterator iterFileSystems = fileSystems.values().iterator();
  -        while (iterFileSystems.hasNext())
  +        synchronized (fileSystems)
           {
  -            AbstractFileSystem fs = (AbstractFileSystem) iterFileSystems.next();
  -            if (fs.isReleaseable())
  +            Iterator iterFileSystems = fileSystems.values().iterator();
  +            while (iterFileSystems.hasNext())
               {
  -                fs.closeCommunicationLink();
  +                AbstractFileSystem fs = (AbstractFileSystem) iterFileSystems.next();
  +                if (fs.isReleaseable())
  +                {
  +                    fs.closeCommunicationLink();
  +                }
               }
           }
       }
   
       public void closeFileSystem(final FileSystem filesystem)
       {
  -        AbstractFileSystem fs = (AbstractFileSystem) filesystem;
  +        synchronized (fileSystems)
  +        {
  +            AbstractFileSystem fs = (AbstractFileSystem) filesystem;
   
  -        fileSystems.remove(fs.getCacheKey());
  -        removeComponent(fileSystems);
  -        fs.close();
  +            fileSystems.remove(fs.getCacheKey());
  +            removeComponent(fileSystems);
  +            fs.close();
  +        }
       }
   }
  
  
  
  1.31      +32 -23    jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java
  
  Index: AbstractFileSystem.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- AbstractFileSystem.java	9 Jul 2004 21:02:51 -0000	1.30
  +++ AbstractFileSystem.java	26 Aug 2004 16:36:41 -0000	1.31
  @@ -248,7 +248,7 @@
       /**
        * Finds a file in this file system.
        */
  -    public FileObject resolveFile(final FileName name) throws FileSystemException
  +    public synchronized FileObject resolveFile(final FileName name) throws FileSystemException
       {
           if (!rootName.getRootURI().equals(name.getRootURI()))
           {
  @@ -362,13 +362,16 @@
       public void addListener(final FileObject file,
                               final FileListener listener)
       {
  -        ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
  -        if (listeners == null)
  +        synchronized (listenerMap)
           {
  -            listeners = new ArrayList();
  -            listenerMap.put(file.getName(), listeners);
  +            ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
  +            if (listeners == null)
  +            {
  +                listeners = new ArrayList();
  +                listenerMap.put(file.getName(), listeners);
  +            }
  +            listeners.add(listener);
           }
  -        listeners.add(listener);
       }
   
       /**
  @@ -377,10 +380,13 @@
       public void removeListener(final FileObject file,
                                  final FileListener listener)
       {
  -        final ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
  -        if (listeners != null)
  +        synchronized (listenerMap)
           {
  -            listeners.remove(listener);
  +            final ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
  +            if (listeners != null)
  +            {
  +                listeners.remove(listener);
  +            }
           }
       }
   
  @@ -418,23 +424,26 @@
        */
       private void fireEvent(final ChangeEvent event)
       {
  -        final FileObject file = event.getFile();
  -        final ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
  -        if (listeners != null)
  +        synchronized (listenerMap)
           {
  -            final int count = listeners.size();
  -            for (int i = 0; i < count; i++)
  +            final FileObject file = event.getFile();
  +            final ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
  +            if (listeners != null)
               {
  -                final FileListener listener = (FileListener) listeners.get(i);
  -                try
  -                {
  -                    event.notify(listener);
  -                }
  -                catch (final Exception e)
  +                final int count = listeners.size();
  +                for (int i = 0; i < count; i++)
                   {
  -                    final String message = Messages.getString("vfs.provider/notify-listener.warn", file);
  -                    // getLogger().warn(message, e);
  -                    VfsLog.warn(getLogger(), log, message, e);
  +                    final FileListener listener = (FileListener) listeners.get(i);
  +                    try
  +                    {
  +                        event.notify(listener);
  +                    }
  +                    catch (final Exception e)
  +                    {
  +                        final String message = Messages.getString("vfs.provider/notify-listener.warn", file);
  +                        // getLogger().warn(message, e);
  +                        VfsLog.warn(getLogger(), log, message, e);
  +                    }
                   }
               }
           }
  
  
  
  1.15      +4 -4      jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java
  
  Index: AbstractLayeredFileProvider.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- AbstractLayeredFileProvider.java	10 May 2004 20:09:42 -0000	1.14
  +++ AbstractLayeredFileProvider.java	26 Aug 2004 16:36:41 -0000	1.15
  @@ -63,9 +63,9 @@
       /**
        * Creates a layered file system.
        */
  -    public FileObject createFileSystem(final String scheme,
  -                                       final FileObject file,
  -                                       final FileSystemOptions fileSystemOptions)
  +    public synchronized FileObject createFileSystem(final String scheme,
  +                                                    final FileObject file,
  +                                                    final FileSystemOptions fileSystemOptions)
           throws FileSystemException
       {
           // Check if cached
  
  
  
  1.19      +2 -2      jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java
  
  Index: AbstractOriginatingFileProvider.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- AbstractOriginatingFileProvider.java	10 May 2004 20:09:42 -0000	1.18
  +++ AbstractOriginatingFileProvider.java	26 Aug 2004 16:36:41 -0000	1.19
  @@ -64,7 +64,7 @@
       /**
        * Locates a file from its parsed URI.
        */
  -    private FileObject findFile(final FileName name, final FileSystemOptions fileSystemOptions)
  +    private synchronized FileObject findFile(final FileName name, final FileSystemOptions fileSystemOptions)
           throws FileSystemException
       {
           // Check in the cache for the file system
  
  
  

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