Skip to content

Commit 058771a

Browse files
committed
Fix deadlock in runAll
1 parent 57a1177 commit 058771a

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

compiler/test/dotty/tools/dotc/ParallelTesting.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ trait ParallelTesting { self =>
309309
Runtime.getRuntime.exec(fullArgs).waitFor() == 0
310310
} else true
311311

312-
val reporter = TestReporter.parallelReporter(this, logLevel =
312+
val reporter = TestReporter.parallelReporter(self, logLevel =
313313
if (suppressErrors || suppressAllOutput) ERROR + 1 else ERROR)
314314
val driver =
315315
if (times == 1) new Driver { def newCompiler(implicit ctx: Context) = new Compiler }
@@ -436,9 +436,13 @@ trait ParallelTesting { self =>
436436
meth.invoke(null, Array("jvm")) // partest passes at least "jvm" as an arg
437437
}
438438
}
439-
} finally {
440439
System.setOut(oldOut)
441440
System.setErr(oldErr)
441+
} catch {
442+
case t: Throwable =>
443+
System.setOut(oldOut)
444+
System.setErr(oldErr)
445+
throw t
442446
}
443447
}
444448
}

compiler/test/dotty/tools/dotc/reporting/TestReporter.scala

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import diagnostic.{ Message, MessageContainer, NoExplanation }
1515
import diagnostic.messages._
1616
import interfaces.Diagnostic.{ ERROR, WARNING, INFO }
1717

18-
class TestReporter protected (outWriter: PrintWriter, filePrintln: String => Unit, logLevel: Int)
18+
class TestReporter protected (outWriter: () => PrintWriter, filePrintln: String => Unit, logLevel: Int)
1919
extends Reporter with UniqueMessagePositions with HideNonSensicalMessages with MessageRendering {
2020
import MessageContainer._
2121

@@ -53,8 +53,8 @@ extends Reporter with UniqueMessagePositions with HideNonSensicalMessages with M
5353
val extraInfo = inlineInfo(m.pos)
5454

5555
if (m.level >= logLevel) {
56-
outWriter.println(msg)
57-
if (extraInfo.nonEmpty) outWriter.println(extraInfo)
56+
outWriter().println(msg)
57+
if (extraInfo.nonEmpty) outWriter().println(extraInfo)
5858
}
5959

6060
_messageBuf.append(msg)
@@ -94,22 +94,19 @@ object TestReporter {
9494
}
9595

9696
def parallelReporter(lock: AnyRef, logLevel: Int): TestReporter = new TestReporter(
97-
new PrintWriter(Console.err, true),
98-
str => lock.synchronized {
99-
logWriter.println(str)
100-
logWriter.flush()
101-
},
97+
() => lock.synchronized { new PrintWriter(Console.err, true) },
98+
str => lock.synchronized { writeToLog(str) },
10299
logLevel
103100
)
104101

105102
def reporter(logLevel: Int): TestReporter = new TestReporter(
106-
new PrintWriter(Console.err, true),
103+
() => new PrintWriter(Console.err, true),
107104
writeToLog,
108105
logLevel
109106
)
110107

111108
def simplifiedReporter(writer: PrintWriter): TestReporter = new TestReporter(
112-
writer,
109+
() => writer,
113110
writeToLog,
114111
WARNING
115112
) {

0 commit comments

Comments
 (0)