Skip to content

Roslyn language server crashes with NullReferenceException when Emacs is unfocused and refocused #4801

Open
@sin-ack

Description

@sin-ack

Thank you for the bug report

  • I am using the latest version of lsp-mode related packages.
  • I checked FAQ and Troubleshooting sections
  • You may also try reproduce the issue using clean environment using the following command: M-x lsp-start-plain

Bug description

I'm trying to use the new Roslyn language server. After the language server starts, if I unfocus the Emacs frame and switch to another window, and then switch back, the Roslyn language server will crash immediately with a C# stack trace. I do think this is a Roslyn bug, but this doesn't seem to happen with VSCode so I think lsp-mode is sending something different/unexpected.

Steps to reproduce

  1. Have .NET SDK 8 installed (either system-wide or via something like asdf)
  2. Create a basic solution/program with the dotnet CLI
  3. M-: (setq lsp-roslyn-package-version "5.0.0-1.25277.1")
  4. M-x lsp-install-server RET roslyn RET
  5. Visit a C# file, let LSP load
  6. Unfocus Emacs frame
  7. Refocus Emacs frame
  8. Crash

Expected behavior

No crashes

Which Language Server did you use?

lsp-roslyn (microsoft.codeanalysis.languageserver.linux-x64 version 5.0.0-1.25277.1)

OS

Linux

Error callstack

Not a Lisp backtrace but this is what Roslyn language server produces.

[textDocument/didChange] [LSP] System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToLinePositionSpan(Range range) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 312
   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 316
   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.ContentChangeEventToTextChange(TextDocumentContentChangeEvent changeEvent, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 357
   at System.Linq.Enumerable.IteratorSelectIterator`2.MoveNext()
   at System.Collections.Immutable.ImmutableArray`1.Builder.AddRange(IEnumerable`1 items)
   at Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.AddRange(IEnumerable`1 items) in /_/src/Dependencies/PooledObjects/ArrayBuilder.cs:line 654
   at Roslyn.Utilities.EnumerableExtensions.SelectAsArray[TSource,TResult](IEnumerable`1 source, Func`2 selector) in /_/src/Dependencies/Collections/Extensions/IEnumerableExtensions.cs:line 371
   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.GetUpdatedSourceText(TextDocumentContentChangeEvent[] contentChanges, SourceText text) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 70
   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.HandleRequestAsync(DidChangeTextDocumentParams request, RequestContext context, CancellationToken cancellationToken) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 33
   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 191
[LSP] System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToLinePositionSpan(Range range) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 312
   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 316
   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.ContentChangeEventToTextChange(TextDocumentContentChangeEvent changeEvent, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 357
   at System.Linq.Enumerable.IteratorSelectIterator`2.MoveNext()
   at System.Collections.Immutable.ImmutableArray`1.Builder.AddRange(IEnumerable`1 items)
   at Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.AddRange(IEnumerable`1 items) in /_/src/Dependencies/PooledObjects/ArrayBuilder.cs:line 654
   at Roslyn.Utilities.EnumerableExtensions.SelectAsArray[TSource,TResult](IEnumerable`1 source, Func`2 selector) in /_/src/Dependencies/Collections/Extensions/IEnumerableExtensions.cs:line 371
   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.GetUpdatedSourceText(TextDocumentContentChangeEvent[] contentChanges, SourceText text) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 70
   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.HandleRequestAsync(DidChangeTextDocumentParams request, RequestContext context, CancellationToken cancellationToken) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 33
   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 191
   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 246
   at Microsoft.CodeAnalysis.LanguageServer.RoslynRequestExecutionQueue.WrapStartRequestTaskAsync(Task requestTask, Boolean rethrowExceptions) in /_/src/LanguageServer/Protocol/RoslynRequestExecutionQueue.cs:line 32
   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.ProcessQueueCoreAsync[TRequest,TResponse](IQueueItem`1 work, IMethodHandler handler, RequestHandlerMetadata metadata, ConcurrentDictionary`2 concurrentlyExecutingTasks, CancellationTokenSource currentWorkCts, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 369
   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.InvokeProcessCoreAsync(IQueueItem`1 work, RequestHandlerMetadata metadata, IMethodHandler handler, MethodInfo methodInfo, ConcurrentDictionary`2 concurrentlyExecutingTasks, CancellationTokenSource currentWorkCts, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 322
   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.ProcessQueueAsync() in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 274

Anything else?

Cleaned up/redacted lsp-log-io log: bug.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions