mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-16 18:53:29 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4e4e0fb172 |
@@ -71,9 +71,9 @@ func panicOrGoexit(message interface{}, panicking panicState) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if panicking == panicGoexit {
|
if panicking == panicGoexit {
|
||||||
// Call to Goexit() instead of a panic.
|
// This is a call to Goexit() instead of a panic.
|
||||||
// Exit the goroutine instead of printing a panic message.
|
// Exit the goroutine instead of printing a panic message.
|
||||||
deadlock()
|
exitGoroutine()
|
||||||
}
|
}
|
||||||
printstring("panic: ")
|
printstring("panic: ")
|
||||||
printitf(message)
|
printitf(message)
|
||||||
|
|||||||
@@ -45,9 +45,18 @@ var (
|
|||||||
//
|
//
|
||||||
//go:noinline
|
//go:noinline
|
||||||
func deadlock() {
|
func deadlock() {
|
||||||
// call yield without requesting a wakeup
|
exitGoroutine()
|
||||||
|
}
|
||||||
|
|
||||||
|
func exitGoroutine() {
|
||||||
|
// Pause the goroutine without a way for it to wake up.
|
||||||
|
// This makes the goroutine unreachable, and should eventually get it
|
||||||
|
// cleaned up by the GC.
|
||||||
task.Pause()
|
task.Pause()
|
||||||
panic("unreachable")
|
|
||||||
|
// We will never return from task.Pause(). Make sure the compiler knows
|
||||||
|
// this.
|
||||||
|
trap()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add this task to the end of the run queue.
|
// Add this task to the end of the run queue.
|
||||||
|
|||||||
@@ -36,6 +36,12 @@ func deadlock() {
|
|||||||
runtimePanic("all goroutines are asleep - deadlock!")
|
runtimePanic("all goroutines are asleep - deadlock!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func exitGoroutine() {
|
||||||
|
// There is only one goroutine, which would exit, so that leads to a
|
||||||
|
// deadlock.
|
||||||
|
deadlock()
|
||||||
|
}
|
||||||
|
|
||||||
func scheduleTask(t *task.Task) {
|
func scheduleTask(t *task.Task) {
|
||||||
// Pause() will panic, so this should not be reachable.
|
// Pause() will panic, so this should not be reachable.
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user