@Override
		public void run() {

			ArrayList<DomainFile> unhandledList = new ArrayList<>();
			DomainFile df = null;
			while (true) {
				synchronized (RecoverySnapshotMgrPlugin.this) {
					if (pendingSnapshotSet.isEmpty()) {
						break;
					}
					df = pendingSnapshotSet.first();
					pendingSnapshotSet.remove(df);
				}
				boolean completed = false;
				try {
					completed = df.takeRecoverySnapshot();
				}
				catch (FileNotFoundException e) {
					// file was removed after snapshot was scheduled - ignore
					completed = true;
				}
				catch (Throwable t) {
					completed = true; // no point in trying again!
					Msg.showError(this, null, "Recovery Snapshot Error",
						"Failed to generate recovery snapshot for: " + df.getName(), t);
				}
				if (!completed && fileSet.contains(df)) {
					unhandledList.add(df);
				}
			}

			synchronized (RecoverySnapshotMgrPlugin.this) {
				if (!unhandledList.isEmpty()) {
					pendingSnapshotSet.clear();
					pendingSnapshotSet.addAll(unhandledList);
					startSnapshotTimer(true);
				}
				else {
					startSnapshotTimer(false);
				}
			}

		}
Tells a plugin that it is no longer needed.  The plugin should remove itself
from anything that it is registered to and release any resources.  Also,
any plugin that overrides this method should call super.dispose().
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/misc/RecoverySnapshotMgrPlugin.java