Skip to content

Commit c8735b7

Browse files
committed
Fix synchronization issue with worksheets
Because the process running the worksheets is shared between worksheets (when possible), we need to synchronize worksheet evaluation.
1 parent e2b563e commit c8735b7

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

language-server/src/dotty/tools/languageserver/DottyLanguageServer.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package languageserver
44
import java.net.URI
55
import java.io._
66
import java.nio.file._
7-
import java.util.concurrent.CompletableFuture
7+
import java.util.concurrent.{CompletableFuture, ConcurrentHashMap}
88
import java.util.function.Function
99

1010
import com.fasterxml.jackson.databind.ObjectMapper
@@ -54,7 +54,7 @@ class DottyLanguageServer extends LanguageServer
5454

5555
private[this] var rootUri: String = _
5656
private[this] var client: LanguageClient = _
57-
private[this] val worksheets: mutable.Map[URI, CompletableFuture[_]] = mutable.Map.empty
57+
private[this] val worksheets: ConcurrentHashMap[URI, CompletableFuture[_]] = new ConcurrentHashMap()
5858

5959
private[this] var myDrivers: mutable.Map[ProjectConfig, InteractiveDriver] = _
6060

@@ -232,8 +232,8 @@ class DottyLanguageServer extends LanguageServer
232232
if (isWorksheet(uri)) {
233233
if (uri.getScheme == "cancel") {
234234
val fileURI = new URI("file", uri.getUserInfo, uri.getHost, uri.getPort, uri.getPath, uri.getQuery, uri.getFragment)
235-
worksheets.get(fileURI).foreach(_.cancel(true))
236-
} else {
235+
Option(worksheets.get(fileURI)).foreach(_.cancel(true))
236+
} else thisServer.synchronized {
237237
val sendMessage = (msg: String) => client.logMessage(new MessageParams(MessageType.Info, uri + msg))
238238
worksheets.put(
239239
uri,

0 commit comments

Comments
 (0)