private void TryCleanupUnusedAdminBuildpacks(StagingStartRequestAdminBuildpack[] adminBuildpacks, string adminBuildpackDir)
        {
            if (!Directory.Exists(adminBuildpackDir))
            {
                return;
            }

            var cachedAdminBuilpacks = new DirectoryInfo(adminBuildpackDir).EnumerateDirectories().ToDictionary(di => di.Name, di => di.FullName);

            var adminBuildpacksLookup = adminBuildpacks.ToLookup(ab => ab.Key);

            foreach (var cachedBuildpack in cachedAdminBuilpacks)
            {
                if (adminBuildpacksLookup.Contains(cachedBuildpack.Key))
                {
                    continue;
                }

                bool signaled = false;
                var buildpackMutex = new Mutex(false, AdminBuildpackMutexName(cachedBuildpack.Key));

                try
                {
                    signaled = buildpackMutex.WaitOne(0);

                    if (signaled)
                    {
                        Logger.Info("Deleting old admin buildpack {0} from {1}", cachedBuildpack.Key, cachedBuildpack.Value);

                        Directory.Delete(cachedBuildpack.Value, true);
                    }
                }
                finally
                {
                    if (signaled)
                    {
                        buildpackMutex.ReleaseMutex();
                    }

                    buildpackMutex.Dispose();
                }
            }
        }