[nocr] Fixed a deadlock in FacetedProject caused by notifying faceted project listeners while holding the monitor on the list of listeners.
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.project.facet.core/META-INF/MANIFEST.MF
index 7622a80..c979c2e 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.project.facet.core/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Vendor: %providerName
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.project.facet.core; singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.wst.common.project.facet.core.internal.FacetCorePlugin
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProject.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProject.java
index 30a370e..988a3f1 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProject.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProject.java
@@ -626,18 +626,26 @@
     
     private void notifyListeners()
     {
+        // Copy the list of listeners in order to avoid holding the monitor
+        // while calling the listeners. This is done to avoid potential 
+        // deadlocks.
+        
+        final Object[] copy;
+        
         synchronized( this.listeners )
         {
-            for( Iterator itr = this.listeners.iterator(); itr.hasNext(); )
+            copy = this.listeners.toArray();
+        }
+        
+        for( int i = 0; i < copy.length; i++ )
+        {
+            try
             {
-                try
-                {
-                    ( (IFacetedProjectListener) itr.next() ).projectChanged();
-                }
-                catch( Exception e )
-                {
-                    FacetCorePlugin.log( e );
-                }
+                ( (IFacetedProjectListener) copy[ i ] ).projectChanged();
+            }
+            catch( Exception e )
+            {
+                FacetCorePlugin.log( e );
             }
         }
     }