From cf5de91acb5e70bc343adbabe69da7f2cd7914fe Mon Sep 17 00:00:00 2001 From: Raif Atef Date: Wed, 23 Aug 2017 12:36:32 +0200 Subject: [PATCH] Use job objects with SIP003 plugin to avoid lingering processes if app is killed. --- shadowsocks-csharp/Controller/Service/Sip003Plugin.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs b/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs index afd395c9..e3391ecb 100644 --- a/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs +++ b/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs @@ -5,6 +5,7 @@ using System.Net; using System.Net.Sockets; using System.Reflection; using Shadowsocks.Model; +using Shadowsocks.Util.ProcessManagement; namespace Shadowsocks.Controller.Service { @@ -15,6 +16,7 @@ namespace Shadowsocks.Controller.Service public int ProcessId => _started ? _pluginProcess.Id : 0; private readonly object _startProcessLock = new object(); + private readonly Job _pluginJob; private readonly Process _pluginProcess; private bool _started; private bool _disposed; @@ -66,6 +68,8 @@ namespace Shadowsocks.Controller.Service } } }; + + _pluginJob = new Job(); } public bool StartIfNeeded() @@ -88,6 +92,7 @@ namespace Shadowsocks.Controller.Service _pluginProcess.StartInfo.Environment["SS_LOCAL_HOST"] = LocalEndPoint.Address.ToString(); _pluginProcess.StartInfo.Environment["SS_LOCAL_PORT"] = LocalEndPoint.Port.ToString(); _pluginProcess.Start(); + _pluginJob.AddProcess(_pluginProcess.Handle); _started = true; } @@ -124,6 +129,7 @@ namespace Shadowsocks.Controller.Service try { _pluginProcess.Dispose(); + _pluginJob.Dispose(); } catch (Exception) { }