Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/GarbageCollector.java
===================================================================
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/GarbageCollector.java	(revision 773028)
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/data/GarbageCollector.java	(working copy)
@@ -20,6 +20,7 @@
 import org.apache.jackrabbit.core.PropertyId;
 import org.apache.jackrabbit.core.RepositoryImpl;
 import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.SessionListener;
 import org.apache.jackrabbit.core.observation.SynchronousEventListener;
 import org.apache.jackrabbit.core.persistence.IterablePersistenceManager;
 import org.apache.jackrabbit.core.state.ItemStateException;
@@ -95,14 +96,24 @@
      *
      * @param list the persistence managers
      */
-    public GarbageCollector(SessionImpl session, IterablePersistenceManager[] list, Session[] sessionList) {
+    public GarbageCollector(final SessionImpl session, IterablePersistenceManager[] list, final Session[] sessionList) {
         RepositoryImpl rep = (RepositoryImpl) session.getRepository();
         store = rep.getDataStore();
         this.pmList = list;
         this.persistenceManagerScan = list != null;
         this.sessionList = sessionList;
-    }
 
+        session.addListener(new SessionListener() {
+			public void loggedOut(SessionImpl session) {
+				for (int i = 0; i < sessionList.length; ++i) {
+					sessionList[i].logout();
+				}
+			}
+			public void loggingOut(SessionImpl session) {
+			}
+		});
+	}
+
     /**
      * Set the delay between scanning items.
      * The main scan loop sleeps this many milliseconds after
