Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite29cc67

Browse files
majochaKevinRansom
authored andcommitted
Deadlock in QuickInfo, again.Fixesdotnet#5254 (dotnet#5257)
* call GetService on UI thread* move things around a bit
1 parentfead0aa commite29cc67

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

‎vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ open Microsoft.VisualStudio.Shell.Interop
1313

1414
typeinternalQuickInfoNavigation
1515
(
16-
serviceProvider: IServiceProvider,
16+
statusBar: StatusBar,
1717
checker: FSharpChecker,
1818
projectInfoManager: FSharpProjectOptionsManager,
1919
initialDoc: Document,
@@ -22,7 +22,6 @@ type internal QuickInfoNavigation
2222

2323
letworkspace= initialDoc.Project.Solution.Workspace
2424
letsolution= workspace.CurrentSolution
25-
letstatusBar= StatusBar(serviceProvider.GetService<SVsStatusbar,IVsStatusbar>())
2625

2726
member__.IsTargetValid(range:range)=
2827
range<> rangeStartup&&

‎vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ module private FSharpQuickInfo =
159159

160160
typeinternalFSharpAsyncQuickInfoSource
161161
(
162-
serviceProvider: IServiceProvider,
162+
statusBar: StatusBar,
163163
xmlMemberIndexService: IVsXMLMemberIndexService,
164164
checkerProvider:FSharpCheckerProvider,
165165
projectInfoManager:FSharpProjectOptionsManager,
@@ -186,6 +186,9 @@ type internal FSharpAsyncQuickInfoSource
186186

187187
interface IAsyncQuickInfoSourcewith
188188
override__.Dispose()=()// no cleanup necessary
189+
190+
// This method can be called from the background thread.
191+
// Do not call IServiceProvider.GetService here.
189192
override__.GetQuickInfoItemAsync(session:IAsyncQuickInfoSession,cancellationToken:CancellationToken):Task<QuickInfoItem>=
190193
lettriggerPoint= session.GetTriggerPoint(textBuffer.CurrentSnapshot)
191194
match triggerPoint.HasValuewith
@@ -211,7 +214,7 @@ type internal FSharpAsyncQuickInfoSource
211214
letmainDescription,documentation,typeParameterMap,usage,exceptions= ResizeArray(), ResizeArray(), ResizeArray(), ResizeArray(), ResizeArray()
212215
XmlDocumentation.BuildDataTipText(documentationBuilder, mainDescription.Add, documentation.Add, typeParameterMap.Add, usage.Add, exceptions.Add, quickInfo.StructuredText)
213216
letimageId= Tokenizer.GetImageIdForSymbol(quickInfo.Symbol, quickInfo.SymbolKind)
214-
letnavigation= QuickInfoNavigation(serviceProvider, checkerProvider.Checker, projectInfoManager, document, symbolUse.RangeAlternate)
217+
letnavigation= QuickInfoNavigation(statusBar, checkerProvider.Checker, projectInfoManager, document, symbolUse.RangeAlternate)
215218
letdocs= joinWithLineBreaks[documentation; typeParameterMap; usage; exceptions]
216219
letcontent= QuickInfoViewProvider.provideContent(imageId, mainDescription, docs, navigation)
217220
letspan= getTrackingSpan quickInfo.Span
@@ -242,7 +245,7 @@ type internal FSharpAsyncQuickInfoSource
242245
]|> ResizeArray
243246
letdocs= joinWithLineBreaks[documentation; typeParameterMap; usage; exceptions]
244247
letimageId= Tokenizer.GetImageIdForSymbol(targetQuickInfo.Symbol, targetQuickInfo.SymbolKind)
245-
letnavigation= QuickInfoNavigation(serviceProvider, checkerProvider.Checker, projectInfoManager, document, symbolUse.RangeAlternate)
248+
letnavigation= QuickInfoNavigation(statusBar, checkerProvider.Checker, projectInfoManager, document, symbolUse.RangeAlternate)
246249
letcontent= QuickInfoViewProvider.provideContent(imageId, mainDescription, docs, navigation)
247250
letspan= getTrackingSpan targetQuickInfo.Span
248251
return QuickInfoItem(span, content)
@@ -260,6 +263,11 @@ type internal FSharpAsyncQuickInfoSourceProvider
260263
checkerProvider:FSharpCheckerProvider,
261264
projectInfoManager:FSharpProjectOptionsManager
262265
)=
266+
263267
interface IAsyncQuickInfoSourceProviderwith
264268
override__.TryCreateQuickInfoSource(textBuffer:ITextBuffer):IAsyncQuickInfoSource=
265-
new FSharpAsyncQuickInfoSource(serviceProvider, serviceProvider.XMLMemberIndexService, checkerProvider, projectInfoManager, textBuffer):> IAsyncQuickInfoSource
269+
// GetService calls must be made on the UI thread
270+
// It is safe to do it here (see #4713)
271+
letstatusBar= StatusBar(serviceProvider.GetService<SVsStatusbar,IVsStatusbar>())
272+
letxmlMemberIndexService= serviceProvider.XMLMemberIndexService
273+
new FSharpAsyncQuickInfoSource(statusBar, xmlMemberIndexService, checkerProvider, projectInfoManager, textBuffer):> IAsyncQuickInfoSource

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp