Merge branch 'stable-2.12' into stable-2.13

* stable-2.12:
  Cancel periodic cleanup task on plugin unload
  Remove source_under_test to comply with new BUCK version

Change-Id: I0d4f1a0bc274b3f58f1fdb1f8d9dfb8d1bfa46e2
diff --git a/BUCK b/BUCK
index 538d217..8865738 100644
--- a/BUCK
+++ b/BUCK
@@ -37,5 +37,4 @@
   resources = glob(['src/test/resources/**/']),
   labels = ['websession-flatfile'],
   deps = GERRIT_TESTS + DEPS,
-  source_under_test = [':websession-flatfile__plugin'],
 )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/websession/flatfile/FlatFileWebSessionCacheCleaner.java b/src/main/java/com/googlesource/gerrit/plugins/websession/flatfile/FlatFileWebSessionCacheCleaner.java
index c6c89a6..3e97dc9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/websession/flatfile/FlatFileWebSessionCacheCleaner.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/websession/flatfile/FlatFileWebSessionCacheCleaner.java
@@ -19,14 +19,19 @@
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+import java.util.concurrent.ScheduledFuture;
 
 class FlatFileWebSessionCacheCleaner implements Runnable {
 
+  @Singleton
   static class CleanerLifecycle implements LifecycleListener {
     private static final int INITIAL_DELAY_MS = 1000;
     private final WorkQueue queue;
     private final FlatFileWebSessionCacheCleaner cleaner;
     private final long cleanupInterval;
+    private ScheduledFuture<?> scheduledCleanupTask;
 
     @Inject
     CleanerLifecycle(
@@ -40,12 +45,16 @@
 
     @Override
     public void start() {
-      queue.getDefaultQueue().scheduleAtFixedRate(cleaner, INITIAL_DELAY_MS,
-          cleanupInterval, MILLISECONDS);
+      scheduledCleanupTask = queue.getDefaultQueue().scheduleAtFixedRate(
+          cleaner, INITIAL_DELAY_MS, cleanupInterval, MILLISECONDS);
     }
 
     @Override
     public void stop() {
+      if (scheduledCleanupTask != null) {
+        scheduledCleanupTask.cancel(true);
+        scheduledCleanupTask = null;
+      }
     }
   }