*** empty log message ***
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties
index 3e08ef5..66a5517 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties
@@ -328,3 +328,4 @@
 CVSSyncTreeSubscriber.0={0} is not a valid comparison criteria for subscriber {1}
 CVSRevisionNumberCompareCriteria.1=Revision number comparison
 RemoteTagSynchronizer.0=Refreshing {0}
+ReentrantLock.9=An error occurred writting CVS synchronization information to disk. Some information may be lost.
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ReentrantLock.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ReentrantLock.java
index 50ea9de..1a43bfd 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ReentrantLock.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ReentrantLock.java
@@ -18,9 +18,12 @@
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.team.internal.ccvs.core.CVSException;
+import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
+import org.eclipse.team.internal.ccvs.core.CVSStatus;
 import org.eclipse.team.internal.ccvs.core.Policy;
 import org.eclipse.team.internal.ccvs.core.util.Assert;
 
@@ -75,10 +78,23 @@
 			return (IContainer[]) changedFolders.toArray(new IContainer[changedFolders.size()]);
 		}
 		public void flush(IProgressMonitor monitor) throws CVSException {
-			operation.flush(this, monitor);
+			try {
+				operation.flush(this, monitor);
+			} catch (OutOfMemoryError e) {
+				throw e;
+			} catch (Error e) {
+				handleAbortedFlush(e);
+				throw e;
+			} catch (RuntimeException e) {
+				handleAbortedFlush(e);
+				throw e;
+			}
 			changedResources.clear();
 			changedFolders.clear();
 		}
+		private void handleAbortedFlush(Throwable t) {
+			CVSProviderPlugin.log(new CVSStatus(IStatus.ERROR, Policy.bind("ReentrantLock.9"), t)); //$NON-NLS-1$
+		}
 	}
 	
 	public interface IFlushOperation {