From 136213d6b4767370f0b6340ffbefa130fdc55327 Mon Sep 17 00:00:00 2001 From: Paul Higinbotham Date: Mon, 27 Feb 2017 15:15:58 -0800 Subject: [PATCH] Fix for race bug in WSMan command plugin instance close operation (#3203) --- .../engine/remoting/fanin/WSManPlugin.cs | 6 ++---- .../engine/remoting/fanin/WSManPluginShellSession.cs | 4 ++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs index 1107219315..be79b6a125 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPlugin.cs @@ -473,15 +473,13 @@ namespace System.Management.Automation.Remoting return; } - SetThreadProperties(mgdShellSession.creationRequestDetails); // update the internal data store only if this is not receive operation. if (!context.isReceiveOperation) { DeleteFromActiveShellSessions(context.shellContext); } - string errorMsg = StringUtil.Format(RemotingErrorIdStrings.WSManPluginOperationClose); - System.Exception reasonForClose = new System.Exception(errorMsg); + System.Exception reasonForClose = new System.Exception(RemotingErrorIdStrings.WSManPluginOperationClose); mgdShellSession.CloseOperation(context, reasonForClose); } @@ -502,7 +500,7 @@ namespace System.Management.Automation.Remoting //Dbg.Assert(false, "context.shellContext not matched"); return; } - SetThreadProperties(mgdShellSession.creationRequestDetails); + mgdShellSession.CloseCommandOperation(context); } diff --git a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs index 3a30e708e8..73792fa7ff 100644 --- a/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs +++ b/src/System.Management.Automation/engine/remoting/fanin/WSManPluginShellSession.cs @@ -698,6 +698,8 @@ namespace System.Management.Automation.Remoting } } + WSManPluginInstance.SetThreadProperties(creationRequestDetails); + bool isRcvOpShuttingDown = (context.isShuttingDown) && (context.isReceiveOperation); bool isRcvOp = context.isReceiveOperation; bool isShuttingDown = context.isShuttingDown; @@ -797,6 +799,8 @@ namespace System.Management.Automation.Remoting } } + WSManPluginInstance.SetThreadProperties(creationRequestDetails); + bool isRcvOp = context.isReceiveOperation; // only one thread will be here. bool isRcvOpShuttingDown = (context.isShuttingDown) &&