hpcloud / tail

Go package for reading from continously updated files (tail -f)
MIT License
2.71k stars 503 forks source link

tail.Stop() throws "all goroutines are asleep - deadlock!" #93

Closed skaji closed 10 months ago

skaji commented 8 years ago

The following code reproduces this.

// test.go
package main

import (
    "github.com/hpcloud/tail"
    "io/ioutil"
)

func main() {
    ioutil.WriteFile("test.log", []byte("hoge\n"), 0644)
    t, _ := tail.TailFile("test.log", tail.Config{})
    t.Stop()
}
> go run test.go
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
github.com/hpcloud/tail/vendor/gopkg.in/tomb%2ev1.(*Tomb).Wait(0xc82007a078, 0x0, 0x0)
    /Users/skaji/src/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/tomb.go:113 +0x58
github.com/hpcloud/tail.(*Tail).Stop(0xc82007a000, 0x0, 0x0)
    /Users/skaji/src/github.com/hpcloud/tail/tail.go:164 +0x5f
main.main()
    /Users/skaji/test.go:12 +0xee

goroutine 5 [chan send]:
github.com/hpcloud/tail.(*Tail).sendLine(0xc82007a000, 0xc82000a420, 0x4, 0x0)
    /Users/skaji/src/github.com/hpcloud/tail/tail.go:418 +0x23a
github.com/hpcloud/tail.(*Tail).tailFileSync(0xc82007a000)
    /Users/skaji/src/github.com/hpcloud/tail/tail.go:272 +0x686
created by github.com/hpcloud/tail.TailFile
    /Users/skaji/src/github.com/hpcloud/tail/tail.go:133 +0x421
exit status 2