Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

InvalidRunspaceStateException: ... runspace is not in the Opened state #1965

Open
rjmholt opened this issue May 15, 2019 · 1 comment
Open
Labels
Area-Engine Issue-Bug A bug to squash.

Comments

@rjmholt
Copy link
Collaborator

rjmholt commented May 15, 2019

System Details

System Details Output

### VSCode version: 1.30.2 61122f88f0bf01e2ac16bdb9e1bc4571755f5bd8 x64

### VSCode extensions:
DavidAnson.vscode-markdownlint@0.26.0
eg2.tslint@1.0.43
jchannon.csharpextensions@1.3.0
k--kato.docomment@0.1.6
Microsoft.vscode-nmake-tools@1.1.181029002
ms-vscode.cpptools@0.22.1
ms-vscode.csharp@1.18.0
ms-vscode.PowerShell@1.11.0
msjsdiag.debugger-for-chrome@4.11.3
vscodevim.vim@1.4.0


### PSES version: 2.0.0.0

### PowerShell version:

Name                           Value
----                           -----
PSVersion                      6.2.0
PSEdition                      Core
GitCommitId                    6.2.0
OS                             Microsoft Windows 10.0.18898
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Issue Description

When a nested expression is entered into a string in a PowerShell editor buffer, PSRL will crash due to a runspace exception. It's likely the root cause isn't with PSRL integration but with PowerShellExecutionContext.

Here's a repro:

Step 1

filter AssembleCLEntry
{
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [ChangelogItem]
        $CLItem,

        [Parameter()]
        [string]
        $Organization = 'PowerShell',

        [Parameter()]
        [string]
        $Repository = 'vscode-powershell'
    )

    return [ChangelogEntry]@{
        IssueLink = if ($CLItem.IssueNumber -ge 0) { "https://github.com/$Organization/$Repository/issues/$($CLItem.IssueNumber)" }
        PRLink = if ($CLItem.PRNumber -ge 0) { "https://github.com/$Organization/$Repository/$" # <-- Next char in the string will crash the extension }
    }
}

Step 2

filter AssembleCLEntry
{
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [ChangelogItem]
        $CLItem,

        [Parameter()]
        [string]
        $Organization = 'PowerShell',

        [Parameter()]
        [string]
        $Repository = 'vscode-powershell'
    )

    return [ChangelogEntry]@{
        IssueLink = if ($CLItem.IssueNumber -ge 0) { "https://github.com/$Organization/$Repository/issues/$($CLItem.IssueNumber)" }
        PRLink = if ($CLItem.PRNumber -ge 0) { "https://github.com/$Organization/$Repository/$(" # <-- BOOM! }
    }
}

Expected Behaviour

Life as normal

Actual Behaviour

Extension crashes

Attached Logs

Relevant Log entry:


2019-05-15 10:38:21.327 [ERROR] tid:26 in 'OnListenTaskCompleted' C:\PowerShellEditorServices\src\PowerShellEditorServices.Protocol\MessageProtocol\ProtocolEndpoint.cs: line 391
    ProtocolEndpoint message loop terminated due to unhandled exception:
    
    System.AggregateException: One or more errors occurred. (Index and length must refer to a location within the string.
    Parameter name: length) ---> System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
    Parameter name: length
       at System.String.Substring(Int32 startIndex, Int32 length)
       at Microsoft.PowerShell.EditorServices.FindReferencesVisitor.VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) in C:\PowerShellEditorServices\src\PowerShellEditorServices\Language\FindReferencesVisitor.cs:line 146
       at System.Management.Automation.Language.FunctionDefinitionAst.InternalVisit(AstVisitor visitor)
       at System.Management.Automation.Language.StatementBlockAst.InternalVisit(AstVisitor visitor, ReadOnlyCollection`1 traps, ReadOnlyCollection`1 statements, AstVisitAction action)
       at System.Management.Automation.Language.NamedBlockAst.InternalVisit(AstVisitor visitor)
       at System.Management.Automation.Language.ScriptBlockAst.InternalVisit(AstVisitor visitor)
       at System.Management.Automation.Language.Ast.Visit(AstVisitor astVisitor)
       at Microsoft.PowerShell.EditorServices.AstOperations.FindReferencesOfSymbol(Ast scriptAst, SymbolReference symbolReference, Dictionary`2 CmdletToAliasDictionary, Dictionary`2 AliasToCmdletDictionary) in C:\PowerShellEditorServices\src\PowerShellEditorServices\Language\AstOperations.cs:line 203
       at Microsoft.PowerShell.EditorServices.LanguageService.FindReferencesOfSymbolAsync(SymbolReference foundSymbol, ScriptFile[] referencedFiles, Workspace workspace) in C:\PowerShellEditorServices\src\PowerShellEditorServices\Language\LanguageService.cs:line 362
       at Microsoft.PowerShell.EditorServices.CodeLenses.ReferencesCodeLensProvider.ResolveCodeLensAsync(CodeLens codeLens, CancellationToken cancellationToken) in C:\PowerShellEditorServices\src\PowerShellEditorServices.Host\CodeLens\ReferencesCodeLensProvider.cs:line 85
       at Microsoft.PowerShell.EditorServices.CodeLenses.CodeLensFeature.HandleCodeLensResolveRequestAsync(CodeLens codeLens, RequestContext`1 requestContext) in C:\PowerShellEditorServices\src\PowerShellEditorServices.Host\CodeLens\CodeLensFeature.cs:line 176
       at Microsoft.PowerShell.EditorServices.Protocol.MessageProtocol.MessageDispatcher.DispatchMessageAsync(Message messageToDispatch, MessageWriter messageWriter) in C:\PowerShellEditorServices\src\PowerShellEditorServices.Protocol\MessageProtocol\MessageDispatcher.cs:line 177
       at Microsoft.PowerShell.EditorServices.Protocol.MessageProtocol.ProtocolEndpoint.ListenForMessagesAsync(CancellationToken cancellationToken) in C:\PowerShellEditorServices\src\PowerShellEditorServices.Protocol\MessageProtocol\ProtocolEndpoint.cs:line 385
       at Microsoft.PowerShell.EditorServices.Utility.AsyncContext.Start(Func`1 asyncMainFunc, ILogger logger) in C:\PowerShellEditorServices\src\PowerShellEditorServices\Utility\AsyncContext.cs:line 50
       at Microsoft.PowerShell.EditorServices.Utility.AsyncContextThread.<>c__DisplayClass4_0.<Run>b__0() in C:\PowerShellEditorServices\src\PowerShellEditorServices\Utility\AsyncContextThread.cs:line 67
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    --- End of stack trace from previous location where exception was thrown ---
       at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
       --- End of inner exception stack trace ---
    ---> (Inner Exception #0) System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
    Parameter name: length
       at System.String.Substring(Int32 startIndex, Int32 length)
       at Microsoft.PowerShell.EditorServices.FindReferencesVisitor.VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst) in C:\PowerShellEditorServices\src\PowerShellEditorServices\Language\FindReferencesVisitor.cs:line 146
       at System.Management.Automation.Language.FunctionDefinitionAst.InternalVisit(AstVisitor visitor)
       at System.Management.Automation.Language.StatementBlockAst.InternalVisit(AstVisitor visitor, ReadOnlyCollection`1 traps, ReadOnlyCollection`1 statements, AstVisitAction action)
       at System.Management.Automation.Language.NamedBlockAst.InternalVisit(AstVisitor visitor)
       at System.Management.Automation.Language.ScriptBlockAst.InternalVisit(AstVisitor visitor)
       at System.Management.Automation.Language.Ast.Visit(AstVisitor astVisitor)
       at Microsoft.PowerShell.EditorServices.AstOperations.FindReferencesOfSymbol(Ast scriptAst, SymbolReference symbolReference, Dictionary`2 CmdletToAliasDictionary, Dictionary`2 AliasToCmdletDictionary) in C:\PowerShellEditorServices\src\PowerShellEditorServices\Language\AstOperations.cs:line 203
       at Microsoft.PowerShell.EditorServices.LanguageService.FindReferencesOfSymbolAsync(SymbolReference foundSymbol, ScriptFile[] referencedFiles, Workspace workspace) in C:\PowerShellEditorServices\src\PowerShellEditorServices\Language\LanguageService.cs:line 362
       at Microsoft.PowerShell.EditorServices.CodeLenses.ReferencesCodeLensProvider.ResolveCodeLensAsync(CodeLens codeLens, CancellationToken cancellationToken) in C:\PowerShellEditorServices\src\PowerShellEditorServices.Host\CodeLens\ReferencesCodeLensProvider.cs:line 85
       at Microsoft.PowerShell.EditorServices.CodeLenses.CodeLensFeature.HandleCodeLensResolveRequestAsync(CodeLens codeLens, RequestContext`1 requestContext) in C:\PowerShellEditorServices\src\PowerShellEditorServices.Host\CodeLens\CodeLensFeature.cs:line 176
       at Microsoft.PowerShell.EditorServices.Protocol.MessageProtocol.MessageDispatcher.DispatchMessageAsync(Message messageToDispatch, MessageWriter messageWriter) in C:\PowerShellEditorServices\src\PowerShellEditorServices.Protocol\MessageProtocol\MessageDispatcher.cs:line 177
       at Microsoft.PowerShell.EditorServices.Protocol.MessageProtocol.ProtocolEndpoint.ListenForMessagesAsync(CancellationToken cancellationToken) in C:\PowerShellEditorServices\src\PowerShellEditorServices.Protocol\MessageProtocol\ProtocolEndpoint.cs:line 385
       at Microsoft.PowerShell.EditorServices.Utility.AsyncContext.Start(Func`1 asyncMainFunc, ILogger logger) in C:\PowerShellEditorServices\src\PowerShellEditorServices\Utility\AsyncContext.cs:line 50
       at Microsoft.PowerShell.EditorServices.Utility.AsyncContextThread.<>c__DisplayClass4_0.<Run>b__0() in C:\PowerShellEditorServices\src\PowerShellEditorServices\Utility\AsyncContextThread.cs:line 67
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    --- End of stack trace from previous location where exception was thrown ---
       at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)<---
    

2019-05-15 10:38:21.327 [ERROR] tid:26 in 'ProtocolEndpoint_UnhandledException' C:\PowerShellEditorServices\src\PowerShellEditorServices.Host\EditorServicesHost.cs: line 490
    PowerShell Editor Services is terminating due to an unhandled exception, see previous logs for details.

2019-05-15 10:38:21.458 [ERROR] tid:1 in 'PopRunspace' C:\PowerShellEditorServices\src\PowerShellEditorServices\Session\PowerShellContext.cs: line 2486
    Caller attempted to pop a runspace when no runspaces are on the stack.

Console exception:

System.Management.Automation.Runspaces.InvalidRunspaceStateException: Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is 'Closing'.
   at System.Management.Automation.Runspaces.RunspaceBase.AddToRunningPipelineList(PipelineBase pipeline)
   at System.Management.Automation.Runspaces.RunspaceBase.DoConcurrentCheckAndAddToRunningPipelines(PipelineBase pipeline, Boolean syncCall)
   at System.Management.Automation.Runspaces.PipelineBase.CoreInvoke(IEnumerable input, Boolean syncCall)
   at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
   at System.Management.Automation.PowerShell.Worker.ConstructPipelineAndDoWork(Runspace rs, Boolean performSyncInvoke)
   at System.Management.Automation.PowerShell.CoreInvokeHelper[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.CoreInvoke[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.Invoke(IEnumerable input, PSInvocationSettings settings)
   at Microsoft.PowerShell.PSConsoleReadLine.ReadKey()
   at Microsoft.PowerShell.PSConsoleReadLine.InputLoop()
   at Microsoft.PowerShell.PSConsoleReadLine.ReadLine(Runspace runspace, EngineIntrinsics engineIntrinsics, CancellationToken cancellationToken)

This might also be related to PowerShell/PowerShellEditorServices#907

@rjmholt
Copy link
Collaborator Author

rjmholt commented May 15, 2019

Workaround (kind of): close the parens immediately -- beating VSCode to the next document change notification will stop a crash for now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Engine Issue-Bug A bug to squash.
Projects
None yet
Development

No branches or pull requests

2 participants