Skip to content

Commit

Permalink
Harden skip in Scanner (#21607)
Browse files Browse the repository at this point in the history
After running metals for a while, I sometimes see a rogue java process
at 100% even after I closed down sbt and vscode. With jstack I got the
following stack trace:

    java.lang.Thread.State: RUNNABLE

at
dotty.tools.dotc.parsing.Scanners$Scanner.handleNewLine(Scanners.scala:613)

at
dotty.tools.dotc.parsing.Scanners$Scanner.nextToken(Scanners.scala:396)

	at dotty.tools.dotc.parsing.Scanners$Scanner.skip(Scanners.scala:312)

	at dotty.tools.dotc.parsing.Parsers$Parser.skip(Parsers.scala:280)

	at dotty.tools.dotc.parsing.Parsers$Parser.recur$2(Parsers.scala:376)

at
dotty.tools.dotc.parsing.Parsers$Parser.statSepOrEnd(Parsers.scala:380)

It could be that the loop in skip gives two alternate offsets that would
not bump the progress counter. I changed the loop so that it catches
infinite looping conditions more robustly.
  • Loading branch information
hamzaremmal authored Sep 20, 2024
2 parents 8068239 + b1235b9 commit 4293a45
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions compiler/src/dotty/tools/dotc/parsing/Scanners.scala
Original file line number Diff line number Diff line change
Expand Up @@ -306,11 +306,15 @@ object Scanners {
println(s"\nSTART SKIP AT ${sourcePos().line + 1}, $this in $currentRegion")
var noProgress = 0
// Defensive measure to ensure we always get out of the following while loop
// even if source file is weirly formatted (i.e. we never reach EOF
// even if source file is weirly formatted (i.e. we never reach EOF)
var prevOffset = offset
while !atStop && noProgress < 3 do
val prevOffset = offset
nextToken()
if offset == prevOffset then noProgress += 1 else noProgress = 0
if offset <= prevOffset then
noProgress += 1
else
prevOffset = offset
noProgress = 0
if debugTokenStream then
println(s"\nSTOP SKIP AT ${sourcePos().line + 1}, $this in $currentRegion")
if token == OUTDENT then dropUntil(_.isInstanceOf[Indented])
Expand Down

0 comments on commit 4293a45

Please sign in to comment.