From 54a20246db6e541d1edce9e2b93cb2d507b7b84c Mon Sep 17 00:00:00 2001 From: JustArchi Date: Mon, 15 Jun 2020 23:28:52 +0200 Subject: [PATCH] Use CrossProcessFileBasedSemaphore exclusively Our reference implementation actually doesn't release the wait handle on process exit, which defeats the purpose. Use file-based semaphore on all OSes as it works reliably. --- .../Helpers/CrossProcessSemaphore.cs | 53 ------------------- ArchiSteamFarm/OS.cs | 9 +--- 2 files changed, 1 insertion(+), 61 deletions(-) delete mode 100644 ArchiSteamFarm/Helpers/CrossProcessSemaphore.cs diff --git a/ArchiSteamFarm/Helpers/CrossProcessSemaphore.cs b/ArchiSteamFarm/Helpers/CrossProcessSemaphore.cs deleted file mode 100644 index 93a8bcc77..000000000 --- a/ArchiSteamFarm/Helpers/CrossProcessSemaphore.cs +++ /dev/null @@ -1,53 +0,0 @@ -// _ _ _ ____ _ _____ -// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___ -// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \ -// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | | -// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_| -// | -// Copyright 2015-2020 Ɓukasz "JustArchi" Domeradzki -// Contact: JustArchi@JustArchi.net -// | -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// | -// http://www.apache.org/licenses/LICENSE-2.0 -// | -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System; -using System.Threading; -using System.Threading.Tasks; -using JetBrains.Annotations; - -namespace ArchiSteamFarm.Helpers { - internal sealed class CrossProcessSemaphore : ICrossProcessSemaphore { - private readonly Semaphore GlobalSemaphore; - - internal CrossProcessSemaphore([NotNull] string name) { - if (string.IsNullOrEmpty(name)) { - throw new ArgumentNullException(nameof(name)); - } - - GlobalSemaphore = new Semaphore(1, 1, name); - } - - public void Dispose() => GlobalSemaphore.Dispose(); - - void ICrossProcessSemaphore.Release() => GlobalSemaphore.Release(); - - [NotNull] - Task ICrossProcessSemaphore.WaitAsync() { - GlobalSemaphore.WaitOne(); - - return Task.CompletedTask; - } - - [NotNull] - Task ICrossProcessSemaphore.WaitAsync(int millisecondsTimeout) => Task.FromResult(GlobalSemaphore.WaitOne(millisecondsTimeout)); - } -} diff --git a/ArchiSteamFarm/OS.cs b/ArchiSteamFarm/OS.cs index d318e1334..376a9a762 100644 --- a/ArchiSteamFarm/OS.cs +++ b/ArchiSteamFarm/OS.cs @@ -71,14 +71,7 @@ namespace ArchiSteamFarm { string resourceName = GetOsResourceName(objectName); - try { - return new CrossProcessSemaphore(resourceName); - } catch (PlatformNotSupportedException e) { - // CrossProcessSemaphore is currently available only for Windows platforms, we use alternative synchronization for other OSes - ASF.ArchiLogger.LogGenericDebuggingException(e); - - return new CrossProcessFileBasedSemaphore(resourceName); - } + return new CrossProcessFileBasedSemaphore(resourceName); } internal static void Init(bool systemRequired, GlobalConfig.EOptimizationMode optimizationMode) {