golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
123k stars 17.54k forks source link

runtime: wasm runtime crashes under certain/undefined conditions #38574

Closed mihaiav closed 4 years ago

mihaiav commented 4 years ago

What version of Go are you using (go version)?

$ go version

go version devel +04040ec9f9 Sun Apr 19 21:15:08 2020 +0000 darwin/amd64

Does this issue reproduce with the latest release?

yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/thetv/Library/Caches/go-build"
GOENV="/Users/thetv/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/thetv/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/thetv/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/thetv/goroot"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/thetv/goroot/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/0y/s4s9kvpn75z7q_m38xtkztl80000gn/T/go-build996626748=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

I've used github.com/golang/glog for logging throughout a large Single Page Application (go compiled to wasm along with a wrapper for javascript's custom element's API).

What did you expect to see?

Logs being printed in the dev console

What did you see instead?

Once the app became more complex (got many custom elements, more concurrent logging) I started to experience a lot of runtime crashes. The latest/worst behaviour was that the application got into a kind a of deadlock and CPU was being exhausted. I couldn't even profile the CPU because the dev tools were being blocked as well due the CPU drain.

I can't reproduce the CPU drain in a simple test case but the code below (compiled to wasm GOOS=js GOARCH=wasm go build -o app.wasm) always throws fatal error: unreachable.

package main

import (
    "flag"
    "time"

    "github.com/golang/glog"
)

func init() {
    flag.Set("logtostderr", "true")
    flag.Set("-logtostderr", "true")
    flag.Parse()
}

func main() {
    Start()
    select {}
}
func Start() {
    for i := 0; i <= 100; i++ {
        go func() {
            for {
                glog.Errorf("connected")
                time.Sleep(1 * time.Second)
            }
        }()
        go func() {
            for {
                glog.Errorf("connected")
                time.Sleep(300 * time.Millisecond)
            }
        }()
        time.Sleep(50 * time.Millisecond)
    }
    for i := 0; i <= 100; i++ {
        go func() {
            for {
                glog.Flush()
                time.Sleep(300 * time.Millisecond)
            }
        }()
    }
    /*
        doc := js.Global().Get("document")
        defaultButtons := document.Call("querySelector", ".defaultButtons")
        doc.Call("addEventListener", "focus", onfocus, true)
    */
}
fatal error: unreachable wasm_exec.js:50 wasm_exec.js:50 goroutine 9 [running]: wasm_exec.js:50 runtime.throw(0x3f415, 0xb) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/panic.go:1116 +0x7 fp=0x422ff0 sp=0x422fc8 pc=0x11cf0007 wasm_exec.js:50 runtime.chanrecv(0x0, 0x423128, 0x1, 0x0) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/chan.go:462 +0x8b fp=0x423078 sp=0x422ff0 pc=0x1060008b wasm_exec.js:50 runtime.chanrecv1(0x0, 0x423128) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/chan.go:434 +0x2 fp=0x4230a0 sp=0x423078 pc=0x105e0002 wasm_exec.js:50 runtime: unexpected return pc for syscall.fsCall called from 0x0 wasm_exec.js:50 stack: frame={sp:0x4230a0, fp:0x423170} stack=[0x422800,0x423000) wasm_exec.js:50 0000000000422fa0: 00000000133d0000 0000000000400d80 wasm_exec.js:50 0000000000422fb0: 0000000011cf0007 0000000000422fc8 wasm_exec.js:50 0000000000422fc0: 0000000011cf0007 0000000000422fd0 wasm_exec.js:50 0000000000422fd0: 00000000133c0000 000000000003f415 wasm_exec.js:50 0000000000422fe0: 000000000000000b 000000001060008b wasm_exec.js:50 0000000000422ff0: 000000000003f415 000000000000000b wasm_exec.js:50 syscall.fsCall(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) wasm_exec.js:50 /Users/thetv/goroot/src/syscall/fs_js.go:521 +0xd fp=0x423170 sp=0x4230a0 pc=0x16c1000d wasm_exec.js:50 created by runtime.beforeIdle wasm_exec.js:50 /Users/thetv/goroot/src/runtime/lock_js.go:192 +0x12 wasm_exec.js:50 wasm_exec.js:50 goroutine 1 [sleep]: wasm_exec.js:50 time.Sleep(0x2faf080) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:34 +0x5 wasm_exec.js:50 main.main() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:17 +0x1 wasm_exec.js:50 wasm_exec.js:50 goroutine 6 [chan receive]: wasm_exec.js:50 github.com/golang/glog.(*loggingT).flushDaemon(0x18d620) wasm_exec.js:50 /Users/thetv/go/src/github.com/golang/glog/glog.go:882 +0x8 wasm_exec.js:50 created by github.com/golang/glog.init.0 wasm_exec.js:50 /Users/thetv/go/src/github.com/golang/glog/glog.go:410 +0x1a wasm_exec.js:50 wasm_exec.js:50 goroutine 7 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 8 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 10 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 11 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 12 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 13 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 14 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 15 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 16 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 17 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 18 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 19 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 20 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 21 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 22 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 23 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 24 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 25 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 26 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 27 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 28 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 29 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 30 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 31 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 32 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 33 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 34 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 35 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 36 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 37 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 38 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 39 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 40 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 41 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 42 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 43 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 44 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 45 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 46 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 47 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 48 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 49 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 50 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 51 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 52 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 53 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 54 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 55 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 56 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 57 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 58 [sleep]: wasm_exec.js:50 time.Sleep(0x3b9aca00) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:25 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 59 [sleep]: wasm_exec.js:50 time.Sleep(0x11e1a300) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/time.go:188 +0xe wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:31 +0x7 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4 wasm_exec.js:50 wasm_exec.js:50 goroutine 60 [semacquire]: wasm_exec.js:50 sync.runtime_SemacquireMutex(0x18d63c, 0x900000000, 0x1) wasm_exec.js:50 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 wasm_exec.js:50 sync.(*Mutex).lockSlow(0x18d638) wasm_exec.js:50 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 wasm_exec.js:50 sync.(*Mutex).Lock(0x18d638) wasm_exec.js:50 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 wasm_exec.js:50 github.com/golang/glog.(*loggingT).output(0x18d620, 0x2, 0x44e070, 0x16b99d, 0x7, 0x18, 0x0) wasm_exec.js:50 /Users/thetv/go/src/github.com/golang/glog/glog.go:672 +0x4 wasm_exec.js:50 github.com/golang/glog.(*loggingT).printf(0x18d620, 0x2, 0x3edbf, 0x9, 0x0, 0x0, 0x0) wasm_exec.js:50 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe wasm_exec.js:50 github.com/golang/glog.Errorf(...) wasm_exec.js:50 /Users/thetv/go/src/github.com/golang/glog/glog.go:1121 wasm_exec.js:50 main.Start.func1() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:24 +0x5 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:22 +0x3 wasm_exec.js:50 wasm_exec.js:50 goroutine 61 [waiting]: wasm_exec.js:50 syscall/js.Value.Call(0x7ff800010000000a, 0x41a020, 0x3e356, 0x5, 0x49c320, 0x6, 0xa, 0xa, 0x1bb290) wasm_exec.js:50 /Users/thetv/goroot/src/syscall/js/js.go:390 +0x3 wasm_exec.js:50 syscall.fsCall(0x3e356, 0x5, 0x495d50, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0) wasm_exec.js:50 /Users/thetv/goroot/src/syscall/fs_js.go:520 +0xc wasm_exec.js:50 syscall.Write(0x2, 0x4520c0, 0x34, 0x40, 0x0, 0x18d520, 0x16e3001a) wasm_exec.js:50 /Users/thetv/goroot/src/syscall/fs_js.go:422 +0xd wasm_exec.js:50 internal/poll.(*FD).Write(0x428120, 0x4520c0, 0x34, 0x40, 0x0, 0x0, 0x0) wasm_exec.js:50 /Users/thetv/goroot/src/internal/poll/fd_unix.go:259 +0x22 wasm_exec.js:50 os.(*File).write(...) wasm_exec.js:50 /Users/thetv/goroot/src/os/file_posix.go:48 wasm_exec.js:50 os.(*File).Write(0x40c028, 0x4520c0, 0x34, 0x40, 0x17ee80, 0x36a40, 0x42e8f0) wasm_exec.js:50 /Users/thetv/goroot/src/os/file.go:153 +0xf wasm_exec.js:50 github.com/golang/glog.(*loggingT).output(0x18d620, 0x2, 0x44e0e0, 0x16b99d, 0x7, 0x1e, 0x0) wasm_exec.js:50 /Users/thetv/go/src/github.com/golang/glog/glog.go:683 +0x66 wasm_exec.js:50 github.com/golang/glog.(*loggingT).printf(0x18d620, 0x2, 0x3edbf, 0x9, 0x0, 0x0, 0x0) wasm_exec.js:50 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe wasm_exec.js:50 github.com/golang/glog.Errorf(...) wasm_exec.js:50 /Users/thetv/go/src/github.com/golang/glog/glog.go:1121 wasm_exec.js:50 main.Start.func2() wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:30 +0x5 wasm_exec.js:50 created by main.Start wasm_exec.js:50 /Users/thetv/go/src/nap.tv/c/poc/wa/xapp/main.go:28 +0x4

Below is also a stacktrace from Firefox when my app gets stuck and I kill the tab/script.

panic: (*js.ValueError) 0x5fbc040 localhost:8080:5435:14 fatal error: panic on system stack localhost:8080:5435:14 runtime stack: localhost:8080:5435:14 runtime: unexpected return pc for syscall/js.Value.Call called from 0x0 localhost:8080:5435:14 stack: frame={sp:0x36c92c0, fp:0x36c9380} stack=[0x36c7158,0x36c8d58) localhost:8080:5435:14 localhost:8080:5435:14 syscall/js.Value.Call(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/syscall/js/js.go:395 +0x37 localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1 [select (no cases), 1 minutes]: localhost:8080:5435:14 thep.uk/server.Server(0x3006f00, 0x3b347e0, 0x2ffbe40, 0x402dd60) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/server/webserver_js.go:65 +0x3a localhost:8080:5435:14 thep.uk/handlers/context.Main(0x3006f00, 0x3b347e0, 0x2ffbe40, 0x402dd60, 0x43803c0, 0x1, 0x1) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/context_js.go:38 +0xc localhost:8080:5435:14 thep.uk/tools/ep/app.Main(0x3006f00, 0x3997a10, 0x2f57740, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/tools/ep/app/app.go:156 +0x36 localhost:8080:5435:14 main.main() localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/_web/destwasm/_web/main.go:30 +0x16 localhost:8080:5435:14 localhost:8080:5435:14 goroutine 6 [semacquire]: localhost:8080:5435:14 sync.runtime_SemacquireMutex(0x36ab47c, 0x1100000000, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 localhost:8080:5435:14 sync.(*Mutex).lockSlow(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 localhost:8080:5435:14 sync.(*Mutex).Lock(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).lockAndFlushAll(0x36ab460) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:889 +0x4 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).flushDaemon(0x36ab460) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:883 +0x6 localhost:8080:5435:14 created by github.com/golang/glog.init.0 localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:410 +0x1a localhost:8080:5435:14 localhost:8080:5435:14 goroutine 8 [waiting]: localhost:8080:5435:14 runtime.gopark(0x0, 0x0, 0x0, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/proc.go:306 +0x22 localhost:8080:5435:14 runtime.handleEvent() localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/lock_js.go:243 +0xf localhost:8080:5435:14 runtime.goexit() localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/asm_wasm.s:428 +0x1 localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1004 [select]: localhost:8080:5435:14 nap.tv/c/ui/play.(*Element).observe.func1(0x3006e40, 0x4250340, 0x6c82300, 0x7ff800010000031f, 0x38fee88, 0x7ff8000100000897, 0x38ff328, 0x7ff80004000007fe, 0x38ff2f0, 0x90e, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/play/element.go:108 +0x6 localhost:8080:5435:14 created by nap.tv/c/ui/play.(*Element).observe localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/play/element.go:106 +0x24 localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1059 [semacquire]: localhost:8080:5435:14 sync.runtime_SemacquireMutex(0x36ab47c, 0x1900000000, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 localhost:8080:5435:14 sync.(*Mutex).lockSlow(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 localhost:8080:5435:14 sync.(*Mutex).Lock(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).output(0x36ab460, 0x2, 0x3a5d2d0, 0x35d80cc, 0xc, 0x41, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:672 +0x4 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).printf(0x36ab460, 0x2, 0x397dc00, 0x12, 0x3a22000, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe localhost:8080:5435:14 github.com/golang/glog.Errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:1121 localhost:8080:5435:14 thep.uk/log/stderr.errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:65 localhost:8080:5435:14 thep.uk/log/stderr.std.Log(0x3006e40, 0x39d1c40, 0x1f4, 0x397dc00, 0x12, 0x3a22000, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:55 +0xf localhost:8080:5435:14 thep.uk/log.Errorf(0x3006e40, 0x39d1c40, 0x14c8fe, 0xe, 0x3a22000, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/log.go:44 +0x10 localhost:8080:5435:14 nap.tv/c/res.Get.func1(0x3006e40, 0x39d1c40) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:187 +0x14 localhost:8080:5435:14 nap.tv/c/res.Get(0x3006f00, 0x40d05d0, 0x41b6310, 0x67, 0x40232f0, 0x1, 0x1, 0x416b200, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:255 +0x15 localhost:8080:5435:14 nap.tv/c/res.fromResourceType(0x3006f00, 0x40d05d0, 0x41b6310, 0x67, 0x4058a25, 0xf, 0xf8ea0, 0x3bad180, 0x5ff0000, 0x28, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/common.go:72 +0x13 localhost:8080:5435:14 nap.tv/c/res.From(0x3006f00, 0x40d05d0, 0x41b6310, 0x67, 0x4058a25, 0xf, 0x0, 0x0, 0x1, 0x100000011, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/common.go:24 +0x4e localhost:8080:5435:14 nap.tv/c/handler.Poster(0x3006f00, 0x40d05d0, 0x41b6310, 0x67, 0x4058a25, 0xf, 0x0, 0x0, 0x4058a3c, 0x9, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/poster.go:32 +0x2 localhost:8080:5435:14 reflect.Value.call(0xc0900, 0x2f577a8, 0x13, 0x14336d, 0x4, 0x3b33440, 0x5, 0x8, 0x4169fc0, 0x39d1c00, ...) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:460 +0x72 localhost:8080:5435:14 reflect.Value.Call(0xc0900, 0x2f577a8, 0x13, 0x3b33440, 0x5, 0x8, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:321 +0xc localhost:8080:5435:14 thep.uk/hamux.(*link).handleFunc(0x387f7c0, 0x3006f00, 0x40d05d0, 0x2ffc9c0, 0x398de00, 0x2ffc9c0, 0x398de00, 0x0, 0x7b940) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:139 +0x9 localhost:8080:5435:14 thep.uk/hamux.(*link).ServeHTTP(0x387f7c0, 0x30061c0, 0x4311300, 0x5f82700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:80 +0x62 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x5f82600) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http/log.(*Link).ServeHTTP(0x39cd2e0, 0x30061c0, 0x4311300, 0x5f82500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/log/log.go:38 +0x22 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x5f82400) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x4311300, 0x5f82400) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x5f82300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x4311300, 0x5f82200) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x5f82100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda660, 0x1, 0x1, 0x30061c0, 0x4311300, 0x3a1f900) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x3a1f700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x4249d00, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x3a1f200) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x39cd2a0, 0x30061c0, 0x4311300, 0x3a1ee00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 github.com/gorilla/mux.(*Router).ServeHTTP(0x4048000, 0x30061c0, 0x4311300, 0x3a1e500) localhost:8080:5435:14 /Users/thetv/go/src/github.com/gorilla/mux/mux.go:162 +0xe localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x3a2fe00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x4311300, 0x3a2fe00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x3a2fc00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x4311300, 0x3a2fa00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x3a2f800) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda950, 0x1, 0x1, 0x30061c0, 0x4311300, 0x3a2f500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x3a2f300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x4249d00, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x4311300, 0x3a2ed00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x402dd60, 0x30061c0, 0x4311300, 0x3a2ea00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 thep.uk/engine/urlfetch.fetchInternal(0x3a2e600, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:67 +0x40 localhost:8080:5435:14 thep.uk/engine/urlfetch.jsTr.RoundTrip(0x2ffb960, 0x369bd20, 0x3a2e600, 0x3a2e600, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:46 +0x35 localhost:8080:5435:14 thep.uk/engine/urlfetch.enhanceTrip.RoundTrip(0x4169580, 0x4, 0x4, 0x2ffcba0, 0x416adf0, 0x3a2e400, 0x160, 0x150, 0xf2c60) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/urlfetch.go:65 +0x18 localhost:8080:5435:14 net/http.send(0x3a2e400, 0x2ffcb80, 0x408d7a0, 0x0, 0x0, 0x0, 0x0, 0x380cba0, 0x408d7d0, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:252 +0x5c localhost:8080:5435:14 net/http.(*Client).send(0x408d770, 0x3a2e400, 0x0, 0x0, 0x0, 0x380cba0, 0x0, 0x1, 0x7b940) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:176 +0x13 localhost:8080:5435:14 net/http.(*Client).do(0x408d770, 0x3a2e400, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:718 +0x38 localhost:8080:5435:14 net/http.(*Client).Do(...) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:586 localhost:8080:5435:14 nap.tv/c/res.Fetch.func1(0x3006ec0, 0x42fb8c0) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:350 +0x1c localhost:8080:5435:14 nap.tv/c/res.Fetch(0x3006e40, 0x4169b00, 0x40589a0, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:390 +0x9 localhost:8080:5435:14 nap.tv/c/ui/poster.getPoster(0x3006e40, 0x4169b00, 0x41b6150, 0x67, 0x4249af0, 0xf, 0x4249b80, 0x9, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/poster/poster.go:218 +0x18 localhost:8080:5435:14 nap.tv/c/ui/poster.(*Poster).read(0x3b52dc0, 0x3006e40, 0x4169b00, 0x7ff8000100000053, 0x4211800) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/poster/poster.go:156 +0x9 localhost:8080:5435:14 nap.tv/c/ui/poster.(*Poster).connectedCallback(0x3b52dc0, 0x3006e40, 0x4169b00, 0x7ff8000100000053, 0x4211800) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/poster/poster.go:99 +0xb localhost:8080:5435:14 nap.tv/c/ui/poster.(*Poster).ConnectedCallback.func1() localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/poster/poster.go:89 +0x2 localhost:8080:5435:14 created by nap.tv/c/util.observeIntersection.func1 localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/util/observer.go:176 +0xd localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1032 [semacquire]: localhost:8080:5435:14 sync.runtime_SemacquireMutex(0x36ab47c, 0x2900000000, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 localhost:8080:5435:14 sync.(*Mutex).lockSlow(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 localhost:8080:5435:14 sync.(*Mutex).Lock(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).output(0x36ab460, 0x2, 0x3a5d3b0, 0x35d80cc, 0xc, 0x41, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:672 +0x4 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).printf(0x36ab460, 0x2, 0x145ced, 0x7, 0x40bdf40, 0x2, 0x2) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe localhost:8080:5435:14 github.com/golang/glog.Errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:1121 localhost:8080:5435:14 thep.uk/log/stderr.errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:65 localhost:8080:5435:14 thep.uk/log/stderr.std.Log(0x3006f00, 0x3b715f0, 0x1f4, 0x145ced, 0x7, 0x40bdf40, 0x2, 0x2) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:55 +0xf localhost:8080:5435:14 thep.uk/log.Error(0x3006f00, 0x3b715f0, 0xd0320, 0x36c3c20) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/log.go:48 +0xc localhost:8080:5435:14 nap.tv/c/handler/multisearch.Query(0x3006f00, 0x3b715f0, 0x41b2254, 0x0, 0x41b2257, 0x0, 0x41b225f, 0x0, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:86 +0x27 localhost:8080:5435:14 reflect.Value.call(0xb40c0, 0x2f577e8, 0x13, 0x14336d, 0x4, 0x43bf1a0, 0x4, 0x4, 0x4168100, 0x3b71890, ...) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:460 +0x72 localhost:8080:5435:14 reflect.Value.Call(0xb40c0, 0x2f577e8, 0x13, 0x43bf1a0, 0x4, 0x4, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:321 +0xc localhost:8080:5435:14 thep.uk/hamux.(*link).handleFunc(0x3af8280, 0x3006f00, 0x3b715f0, 0x2ffc9c0, 0x5fbeaa0, 0x2ffc9c0, 0x5fbeaa0, 0x0, 0x7b940) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:139 +0x9 localhost:8080:5435:14 thep.uk/hamux.(*link).ServeHTTP(0x3af8280, 0x30061c0, 0x41ef720, 0x39e1300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:80 +0x62 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e1100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http/log.(*Link).ServeHTTP(0x4311040, 0x30061c0, 0x41ef720, 0x39e0f00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/log/log.go:38 +0x22 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e0d00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x41ef720, 0x39e0d00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e0900) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x41ef720, 0x39e0700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e0300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda7b0, 0x1, 0x1, 0x30061c0, 0x41ef720, 0x39e0100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e7f00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x42632c0, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e7900) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x4311000, 0x30061c0, 0x41ef720, 0x39e7600) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 github.com/gorilla/mux.(*Router).ServeHTTP(0x4048000, 0x30061c0, 0x41ef720, 0x39e7200) localhost:8080:5435:14 /Users/thetv/go/src/github.com/gorilla/mux/mux.go:162 +0xe localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e7000) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x41ef720, 0x39e7000) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e6e00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x41ef720, 0x39e6900) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e6700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda950, 0x1, 0x1, 0x30061c0, 0x41ef720, 0x39e6500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x39e6300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x42632c0, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef720, 0x3a03a00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x402dd60, 0x30061c0, 0x41ef720, 0x3a03800) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 thep.uk/engine/urlfetch.fetchInternal(0x3a03500, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:67 +0x40 localhost:8080:5435:14 thep.uk/engine/urlfetch.jsTr.RoundTrip(0x2ffb960, 0x369bd20, 0x3a03500, 0x3a03500, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:46 +0x35 localhost:8080:5435:14 thep.uk/engine/urlfetch.enhanceTrip.RoundTrip(0x3b7ec00, 0x8, 0x8, 0x2ffcba0, 0x3b5a4b0, 0x3a03200, 0x160, 0x150, 0xf2c60) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/urlfetch.go:65 +0x18 localhost:8080:5435:14 net/http.send(0x3a03200, 0x2ffcb80, 0x3995aa0, 0x0, 0x0, 0x0, 0x0, 0x380ccd8, 0x3995ad0, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:252 +0x5c localhost:8080:5435:14 net/http.(*Client).send(0x3995a70, 0x3a03200, 0x0, 0x0, 0x0, 0x380ccd8, 0x0, 0x1, 0x7b940) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:176 +0x13 localhost:8080:5435:14 net/http.(*Client).do(0x3995a70, 0x3a03200, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:718 +0x38 localhost:8080:5435:14 net/http.(*Client).Do(...) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:586 localhost:8080:5435:14 nap.tv/c/res.httpGet(0x3006e40, 0x429f2c0, 0x41b2240, 0x27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:300 +0x40 localhost:8080:5435:14 nap.tv/c/res.Get.func1(0x3006e40, 0x429f2c0) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:185 +0x4 localhost:8080:5435:14 nap.tv/c/res.Get(0x3006f00, 0x39956e0, 0x41b2240, 0x27, 0x4287560, 0x1, 0x1, 0x3b5a300, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:255 +0x15 localhost:8080:5435:14 nap.tv/c/res.fromResourceType(0x3006f00, 0x39956e0, 0x41b2240, 0x27, 0x151125, 0x14, 0x0, 0x5eec0, 0x36c4a00, 0x3995920, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/common.go:72 +0x13 localhost:8080:5435:14 nap.tv/c/res.From(0x3006f00, 0x39956e0, 0x41b2240, 0x27, 0x151125, 0x14, 0x0, 0x0, 0x16, 0xc4700, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/common.go:24 +0x4e localhost:8080:5435:14 nap.tv/c/handler.PostersList(0x3006f00, 0x39956e0, 0x41b2240, 0x27, 0x0, 0x0, 0x3873471, 0x9, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/poster.go:111 +0x2 localhost:8080:5435:14 reflect.Value.call(0xb8b80, 0x2f577a0, 0x13, 0x14336d, 0x4, 0x43bef00, 0x4, 0x4, 0x4251fc0, 0x3995920, ...) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:460 +0x72 localhost:8080:5435:14 reflect.Value.Call(0xb8b80, 0x2f577a0, 0x13, 0x43bef00, 0x4, 0x4, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:321 +0xc localhost:8080:5435:14 thep.uk/hamux.(*link).handleFunc(0x387fa40, 0x3006f00, 0x39956e0, 0x2ffc9c0, 0x5fbe910, 0x2ffc9c0, 0x5fbe910, 0x0, 0x7b940) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:139 +0x9 localhost:8080:5435:14 thep.uk/hamux.(*link).ServeHTTP(0x387fa40, 0x30061c0, 0x41ef3c0, 0x3a02e00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:80 +0x62 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x3a02c00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http/log.(*Link).ServeHTTP(0x39cd520, 0x30061c0, 0x41ef3c0, 0x3a02a00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/log/log.go:38 +0x22 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x3a02800) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x41ef3c0, 0x3a02800) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x3a02500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x41ef3c0, 0x3a02300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x3a02100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda680, 0x1, 0x1, 0x30061c0, 0x41ef3c0, 0x5f83f00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x5f83e00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x4263110, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x5f83c00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x39cd4e0, 0x30061c0, 0x41ef3c0, 0x5f83b00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 github.com/gorilla/mux.(*Router).ServeHTTP(0x4048000, 0x30061c0, 0x41ef3c0, 0x5f83900) localhost:8080:5435:14 /Users/thetv/go/src/github.com/gorilla/mux/mux.go:162 +0xe localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x5f83700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x41ef3c0, 0x5f83700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x5f83600) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x41ef3c0, 0x5f83500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x5f83400) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda950, 0x1, 0x1, 0x30061c0, 0x41ef3c0, 0x5f83300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x5f83200) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x4263110, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x41ef3c0, 0x5f83000) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x402dd60, 0x30061c0, 0x41ef3c0, 0x5f82f00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 thep.uk/engine/urlfetch.fetchInternal(0x5f82e00, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:67 +0x40 localhost:8080:5435:14 thep.uk/engine/urlfetch.jsTr.RoundTrip(0x2ffb960, 0x369bd20, 0x5f82e00, 0x5f82e00, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:46 +0x35 localhost:8080:5435:14 thep.uk/engine/urlfetch.enhanceTrip.RoundTrip(0x4169580, 0x4, 0x4, 0x2ffcba0, 0x3b5a170, 0x5f82d00, 0x160, 0x150, 0xf2c60) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/urlfetch.go:65 +0x18 localhost:8080:5435:14 created by nap.tv/c/util.(*GC).AddEventListener.func1 localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/util/gc.go:73 +0x6 localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1085 [semacquire]: localhost:8080:5435:14 sync.runtime_SemacquireMutex(0x36ab47c, 0x2100000000, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 localhost:8080:5435:14 sync.(*Mutex).lockSlow(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 localhost:8080:5435:14 sync.(*Mutex).Lock(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).output(0x36ab460, 0x2, 0x3a5d340, 0x35d80cc, 0xc, 0x41, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:672 +0x4 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).printf(0x36ab460, 0x2, 0x397dc60, 0x12, 0x3a22040, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe localhost:8080:5435:14 github.com/golang/glog.Errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:1121 localhost:8080:5435:14 thep.uk/log/stderr.errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:65 localhost:8080:5435:14 thep.uk/log/stderr.std.Log(0x3006e40, 0x429fd80, 0x1f4, 0x397dc60, 0x12, 0x3a22040, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:55 +0xf localhost:8080:5435:14 thep.uk/log.Errorf(0x3006e40, 0x429fd80, 0x14c8fe, 0xe, 0x3a22040, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/log.go:44 +0x10 localhost:8080:5435:14 nap.tv/c/res.Get.func1(0x3006e40, 0x429fd80) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:187 +0x14 localhost:8080:5435:14 nap.tv/c/res.Get(0x3006f00, 0x3b715f0, 0x41b3110, 0x2f, 0x38cdee8, 0x1, 0x1, 0x3b71200, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:255 +0x15 localhost:8080:5435:14 nap.tv/c/handler/multisearch.fromDefaultSearch(0x3006f00, 0x3b715f0, 0x41b3110, 0x2f, 0x3b714d0, 0x42633d8, 0x370a0005, 0x3b715f0, 0x4379178, 0x7ff80001000000bf, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:318 +0x3 localhost:8080:5435:14 nap.tv/c/handler/multisearch.fromCursors.func1(0x3ad8cc0, 0x3006f00, 0x3b715f0, 0x3a5d0a0, 0x2, 0x2, 0x41b3110, 0x2f, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:243 +0x2 localhost:8080:5435:14 created by nap.tv/c/handler/multisearch.fromCursors localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:241 +0x7a localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1005 [waiting]: localhost:8080:5435:14 syscall/js.Value.Call(0x7ff800010000000a, 0x3828020, 0x144929, 0x5, 0x426f4a0, 0x6, 0xa, 0xa, 0x3fba598) localhost:8080:5435:14 /Users/thetv/goroot/src/syscall/js/js.go:390 +0x3 localhost:8080:5435:14 syscall.fsCall(0x144929, 0x5, 0x4021ae8, 0x5, 0x5, 0x0, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/syscall/fs_js.go:520 +0xc localhost:8080:5435:14 syscall.Write(0x2, 0x4108dc0, 0x127, 0x2a1, 0x0, 0x36ab1a0, 0x1609001a) localhost:8080:5435:14 /Users/thetv/goroot/src/syscall/fs_js.go:422 +0xd localhost:8080:5435:14 internal/poll.(*FD).Write(0x3836120, 0x4108dc0, 0x127, 0x2a1, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/internal/poll/fd_unix.go:259 +0x22 localhost:8080:5435:14 os.(*File).write(...) localhost:8080:5435:14 /Users/thetv/goroot/src/os/file_posix.go:48 localhost:8080:5435:14 os.(*File).Write(0x380c028, 0x4108dc0, 0x127, 0x2a1, 0x3696520, 0x12f080, 0x3aef2b0) localhost:8080:5435:14 /Users/thetv/goroot/src/os/file.go:153 +0xf localhost:8080:5435:14 github.com/golang/glog.(*loggingT).output(0x36ab460, 0x0, 0x3a5d1f0, 0x35d80cc, 0xc, 0x3c, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:683 +0x66 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).printf(0x36ab460, 0x0, 0x397d9c0, 0x1e, 0x40bdde0, 0x2, 0x2) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe localhost:8080:5435:14 github.com/golang/glog.Infof(...) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:1073 localhost:8080:5435:14 thep.uk/log/stderr.infof(...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:60 localhost:8080:5435:14 thep.uk/log/stderr.std.Log(0x3006e40, 0x4250880, 0xc8, 0x397d9c0, 0x1e, 0x40bdde0, 0x2, 0x2) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:51 +0x15 localhost:8080:5435:14 thep.uk/log.Infof(0x3006e40, 0x4250880, 0x155614, 0x1a, 0x40bdde0, 0x2, 0x2) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/log.go:75 +0x10 localhost:8080:5435:14 nap.tv/c/ui/video.(*Element).AttributeChangedCallback(0x389e3c0, 0x3006e40, 0x4250880, 0x7ff800010000031d, 0x38ff3c0, 0x7ff8000200000313, 0x41ea9b8, 0x7ff8000200000345, 0x41ea9c0, 0x7ff80002000002d3, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/video/element.go:176 +0x51 localhost:8080:5435:14 nap.tv/c/util.(*element).toJS.func2.1(0x3b1a050, 0x3006e40, 0x4250880, 0x7ff800010000031d, 0x38ff3c0) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/util/custom_element.go:200 +0x19 localhost:8080:5435:14 created by nap.tv/c/util.(*element).toJS.func2 localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/util/custom_element.go:188 +0x9 localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1086 [semacquire]: localhost:8080:5435:14 sync.runtime_SemacquireMutex(0x36ab47c, 0x3100000000, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 localhost:8080:5435:14 sync.(*Mutex).lockSlow(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 localhost:8080:5435:14 sync.(*Mutex).Lock(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).output(0x36ab460, 0x2, 0x3a5d420, 0x35d80cc, 0xc, 0x41, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:672 +0x4 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).printf(0x36ab460, 0x2, 0x397dd00, 0x12, 0x3a22080, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe localhost:8080:5435:14 github.com/golang/glog.Errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:1121 localhost:8080:5435:14 thep.uk/log/stderr.errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:65 localhost:8080:5435:14 thep.uk/log/stderr.std.Log(0x3006f00, 0x398ef60, 0x1f4, 0x397dd00, 0x12, 0x3a22080, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:55 +0xf localhost:8080:5435:14 thep.uk/log.Errorf(0x3006f00, 0x398ef60, 0x14ce76, 0xe, 0x3a22080, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/log.go:44 +0x10 localhost:8080:5435:14 nap.tv/c/searchalt/youtube/request.HTMLRequest(0x3006f00, 0x398ef60, 0x1551b6, 0x1a, 0x400f180, 0x4076b00, 0x380, 0x3a060271) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/searchalt/youtube/request/general.go:85 +0x80 localhost:8080:5435:14 nap.tv/c/searchalt/youtube/request.(*Client).FromHTML(0x3690a40, 0x3006f00, 0x398ef60, 0x1551b6, 0x1a, 0x35f0901, 0x0, 0x0, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/searchalt/youtube/request/general.go:172 +0x2 localhost:8080:5435:14 nap.tv/c/searchalt/youtube/music.FromMusicResource(0x3006f00, 0x398ef60, 0x3b4ed4c, 0x0, 0x3b4ed59, 0x0, 0x0, 0x0, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/searchalt/youtube/music/request.go:35 +0xcc localhost:8080:5435:14 nap.tv/c/searchalt/youtube/music.metaSearch(0x3006f00, 0x398ef60, 0x3b4ed4c, 0x0, 0x3b4ed59, 0x0, 0x3b4ed61, 0x0, 0x398ef60, 0x10af004d, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/searchalt/youtube/music/handlers.go:57 +0x4 localhost:8080:5435:14 nap.tv/c/searchalt/youtube/music.MetaOpenSearchEngine(0x3006f00, 0x398ef60, 0x3b4ed4c, 0x0, 0x3b4ed59, 0x0, 0x3b4ed61, 0x0, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/searchalt/youtube/music/handlers.go:31 +0x2 localhost:8080:5435:14 reflect.Value.call(0xb40c0, 0x2f578b8, 0x13, 0x14336d, 0x4, 0x42fe360, 0x4, 0x4, 0x4169880, 0x398f080, ...) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:460 +0x72 localhost:8080:5435:14 reflect.Value.Call(0xb40c0, 0x2f578b8, 0x13, 0x42fe360, 0x4, 0x4, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:321 +0xc localhost:8080:5435:14 thep.uk/hamux.(*link).handleFunc(0x3af9680, 0x3006f00, 0x398ef60, 0x2ffc9c0, 0x5fbf720, 0x2ffc9c0, 0x5fbf720, 0x0, 0x7b940) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:139 +0x9 localhost:8080:5435:14 thep.uk/hamux.(*link).ServeHTTP(0x3af9680, 0x30061c0, 0x40bd1e0, 0x39b5900) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:80 +0x62 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39b5700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http/log.(*Link).ServeHTTP(0x402c240, 0x30061c0, 0x40bd1e0, 0x39b5500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/log/log.go:38 +0x22 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39b5100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x40bd1e0, 0x39b5100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39b4f00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39b4d00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39b4a00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda8c0, 0x1, 0x1, 0x30061c0, 0x40bd1e0, 0x39b4800) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39b4500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x3ad9a60, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39b4100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x402c200, 0x30061c0, 0x40bd1e0, 0x39c1e00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 github.com/gorilla/mux.(*Router).ServeHTTP(0x4048000, 0x30061c0, 0x40bd1e0, 0x39c1900) localhost:8080:5435:14 /Users/thetv/go/src/github.com/gorilla/mux/mux.go:162 +0xe localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39c1700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x40bd1e0, 0x39c1700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39c1500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39c1300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39c1100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda950, 0x1, 0x1, 0x30061c0, 0x40bd1e0, 0x39c0d00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39c0b00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x3ad9a60, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x40bd1e0, 0x39c0600) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x402dd60, 0x30061c0, 0x40bd1e0, 0x39c0400) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 thep.uk/engine/urlfetch.fetchInternal(0x39c0200, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:67 +0x40 localhost:8080:5435:14 thep.uk/engine/urlfetch.jsTr.RoundTrip(0x2ffb960, 0x369bd20, 0x39c0200, 0x39c0200, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:46 +0x35 localhost:8080:5435:14 thep.uk/engine/urlfetch.enhanceTrip.RoundTrip(0x39e6100, 0xc, 0x10, 0x2ffcba0, 0x4381180, 0x39c0000, 0x160, 0x150, 0xf2c60) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/urlfetch.go:65 +0x18 localhost:8080:5435:14 net/http.send(0x39c0000, 0x2ffcb80, 0x398e570, 0x0, 0x0, 0x0, 0x0, 0x380cf70, 0x398e5a0, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:252 +0x5c localhost:8080:5435:14 net/http.(*Client).send(0x398e540, 0x39c0000, 0x0, 0x0, 0x0, 0x380cf70, 0x0, 0x1, 0x7b940) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:176 +0x13 localhost:8080:5435:14 net/http.(*Client).do(0x398e540, 0x39c0000, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:718 +0x38 localhost:8080:5435:14 net/http.(*Client).Do(...) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:586 localhost:8080:5435:14 nap.tv/c/res.httpGet(0x3006e40, 0x429fdc0, 0x3b4ed20, 0x49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:300 +0x40 localhost:8080:5435:14 nap.tv/c/res.Get.func1(0x3006e40, 0x429fdc0) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:185 +0x4 localhost:8080:5435:14 nap.tv/c/res.Get(0x3006f00, 0x3b715f0, 0x3b4ed20, 0x49, 0x38cdee8, 0x1, 0x1, 0x7ff8000100000400, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:255 +0x15 localhost:8080:5435:14 nap.tv/c/handler/multisearch.fromDefaultSearch(0x3006f00, 0x3b715f0, 0x3b4ed20, 0x49, 0x42ab578, 0x7b500, 0x2fed930, 0x132020, 0x4380240, 0x7ff8000100000738, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:318 +0x3 localhost:8080:5435:14 nap.tv/c/handler/multisearch.fromCursors.func1(0x3ad8cc0, 0x3006f00, 0x3b715f0, 0x3a5d0a0, 0x2, 0x2, 0x3b4ed20, 0x49, 0x1) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:243 +0x2 localhost:8080:5435:14 created by nap.tv/c/handler/multisearch.fromCursors localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:241 +0x7a localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1076 [semacquire]: localhost:8080:5435:14 sync.runtime_SemacquireMutex(0x36ab47c, 0x3900000000, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 localhost:8080:5435:14 sync.(*Mutex).lockSlow(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 localhost:8080:5435:14 sync.(*Mutex).Lock(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).output(0x36ab460, 0x2, 0x3a5d490, 0x35d80cc, 0xc, 0x41, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:672 +0x4 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).printf(0x36ab460, 0x2, 0x397dd60, 0x12, 0x3a220c0, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe localhost:8080:5435:14 github.com/golang/glog.Errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:1121 localhost:8080:5435:14 thep.uk/log/stderr.errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:65 localhost:8080:5435:14 thep.uk/log/stderr.std.Log(0x3006e40, 0x429f7c0, 0x1f4, 0x397dd60, 0x12, 0x3a220c0, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:55 +0xf localhost:8080:5435:14 thep.uk/log.Errorf(0x3006e40, 0x429f7c0, 0x14c8fe, 0xe, 0x3a220c0, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/log.go:44 +0x10 localhost:8080:5435:14 nap.tv/c/res.Get.func1(0x3006e40, 0x429f7c0) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:187 +0x14 localhost:8080:5435:14 nap.tv/c/res.Get(0x3006f00, 0x3b8f170, 0x41ec310, 0x67, 0x42572f0, 0x1, 0x1, 0x3b5ba00, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:255 +0x15 localhost:8080:5435:14 nap.tv/c/res.fromResourceType(0x3006f00, 0x3b8f170, 0x41ec310, 0x67, 0x4059735, 0xf, 0x100000004257538, 0x40004257558, 0x8, 0x3006e40, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/common.go:72 +0x13 localhost:8080:5435:14 nap.tv/c/res.From(0x3006f00, 0x3b8f170, 0x41ec310, 0x67, 0x4059735, 0xf, 0x0, 0x0, 0x4272700, 0x132eb004e, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/common.go:24 +0x4e localhost:8080:5435:14 nap.tv/c/handler.Poster(0x3006f00, 0x3b8f170, 0x41ec310, 0x67, 0x4059735, 0xf, 0x0, 0x0, 0x405974c, 0x9, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/poster.go:32 +0x2 localhost:8080:5435:14 reflect.Value.call(0xc0900, 0x2f577a8, 0x13, 0x14336d, 0x4, 0x4106240, 0x5, 0x8, 0x4169fc0, 0x429f780, ...) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:460 +0x72 localhost:8080:5435:14 reflect.Value.Call(0xc0900, 0x2f577a8, 0x13, 0x4106240, 0x5, 0x8, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/reflect/value.go:321 +0xc localhost:8080:5435:14 thep.uk/hamux.(*link).handleFunc(0x387f7c0, 0x3006f00, 0x3b8f170, 0x2ffc9c0, 0x5fbedc0, 0x2ffc9c0, 0x5fbedc0, 0x0, 0x7b940) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:139 +0x9 localhost:8080:5435:14 thep.uk/hamux.(*link).ServeHTTP(0x387f7c0, 0x30061c0, 0x3bf85e0, 0x39c2300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/serve.go:80 +0x62 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39c2100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http/log.(*Link).ServeHTTP(0x39cd2e0, 0x30061c0, 0x3bf85e0, 0x39d3e00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/log/log.go:38 +0x22 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d3b00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x3bf85e0, 0x39d3b00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d3900) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d3700) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d3500) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda660, 0x1, 0x1, 0x30061c0, 0x3bf85e0, 0x39d3300) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d3100) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x42924d0, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d2c00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x39cd2a0, 0x30061c0, 0x3bf85e0, 0x39d2800) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 github.com/gorilla/mux.(*Router).ServeHTTP(0x4048000, 0x30061c0, 0x3bf85e0, 0x39d2300) localhost:8080:5435:14 /Users/thetv/go/src/github.com/gorilla/mux/mux.go:162 +0xe localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d2000) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/global.(*state).ServeHTTP(0x3690178, 0x30061c0, 0x3bf85e0, 0x39d2000) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/global/global.go:70 +0x12 localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d7f00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/auth/cookie.cookieHandler.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d7c00) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/auth/cookie/cookie.go:53 +0x2c localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d7900) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.enhancer.ServeHTTP(0x3bda950, 0x1, 0x1, 0x30061c0, 0x3bf85e0, 0x39d7600) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:127 +0x1d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d7200) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/handlers/context.Config.ServeHTTP(0x4261394, 0xa, 0x0, 0x0, 0x0, 0x4261376, 0xa, 0x43a028b, 0x3, 0x42924d0, ...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/handlers/context/config.go:108 +0x7d localhost:8080:5435:14 thep.uk/hamux/http.ServeHTTP(0x30061c0, 0x3bf85e0, 0x39d6800) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:53 +0x27 localhost:8080:5435:14 thep.uk/hamux/http.(*manager).ServeHTTP(0x402dd60, 0x30061c0, 0x3bf85e0, 0x39d6400) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/hamux/http/http.go:91 +0x20 localhost:8080:5435:14 thep.uk/engine/urlfetch.fetchInternal(0x39d6200, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:67 +0x40 localhost:8080:5435:14 thep.uk/engine/urlfetch.jsTr.RoundTrip(0x2ffb960, 0x369bd20, 0x39d6200, 0x39d6200, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/roundtrip_js.go:46 +0x35 localhost:8080:5435:14 thep.uk/engine/urlfetch.enhanceTrip.RoundTrip(0x4169580, 0x4, 0x4, 0x2ffcba0, 0x3b5b740, 0x39e1f00, 0x160, 0x150, 0xf2c60) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/engine/urlfetch/urlfetch.go:65 +0x18 localhost:8080:5435:14 net/http.send(0x39e1f00, 0x2ffcb80, 0x3b8e210, 0x0, 0x0, 0x0, 0x0, 0x380ce60, 0x3b8e240, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:252 +0x5c localhost:8080:5435:14 net/http.(*Client).send(0x3b8e1e0, 0x39e1f00, 0x0, 0x0, 0x0, 0x380ce60, 0x0, 0x1, 0x7b940) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:176 +0x13 localhost:8080:5435:14 net/http.(*Client).do(0x3b8e1e0, 0x39e1f00, 0x0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:718 +0x38 localhost:8080:5435:14 net/http.(*Client).Do(...) localhost:8080:5435:14 /Users/thetv/goroot/src/net/http/client.go:586 localhost:8080:5435:14 nap.tv/c/res.Fetch.func1(0x3006ec0, 0x43bfa40) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:350 +0x1c localhost:8080:5435:14 nap.tv/c/res.Fetch(0x3006e40, 0x3bf4280, 0x40596b0, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:390 +0x9 localhost:8080:5435:14 nap.tv/c/ui/poster.getPoster(0x3006e40, 0x3bf4280, 0x41ec1c0, 0x67, 0x4292190, 0xf, 0x42921d0, 0x9, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/poster/poster.go:218 +0x18 localhost:8080:5435:14 nap.tv/c/ui/poster.(*Poster).read(0x3b53220, 0x3006e40, 0x3bf4280, 0x7ff8000100000636, 0x412ca40) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/poster/poster.go:156 +0x9 localhost:8080:5435:14 nap.tv/c/ui/poster.(*Poster).connectedCallback(0x3b53220, 0x3006e40, 0x3bf4280, 0x7ff8000100000636, 0x412ca40) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/poster/poster.go:99 +0xb localhost:8080:5435:14 nap.tv/c/ui/poster.(*Poster).ConnectedCallback.func1() localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/poster/poster.go:89 +0x2 localhost:8080:5435:14 created by nap.tv/c/util.observeIntersection.func1 localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/util/observer.go:176 +0xd localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1089 [semacquire]: localhost:8080:5435:14 sync.runtime_SemacquireMutex(0x36ab47c, 0x900000000, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 localhost:8080:5435:14 sync.(*Mutex).lockSlow(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 localhost:8080:5435:14 sync.(*Mutex).Lock(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).output(0x36ab460, 0x0, 0x3a5d260, 0x35d80cc, 0xc, 0x3c, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:672 +0x4 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).printf(0x36ab460, 0x0, 0x41b3470, 0x2b, 0x3b7f680, 0x5, 0x8) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe localhost:8080:5435:14 github.com/golang/glog.Infof(...) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:1073 localhost:8080:5435:14 thep.uk/log/stderr.infof(...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:60 localhost:8080:5435:14 thep.uk/log/stderr.std.Log(0x3006e40, 0x4251c80, 0xc8, 0x41b3470, 0x2b, 0x3b7f680, 0x5, 0x8) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:51 +0x15 localhost:8080:5435:14 thep.uk/log.Infof(0x3006e40, 0x4251c80, 0x161148, 0x27, 0x3b7f680, 0x5, 0x8) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/log.go:75 +0x10 localhost:8080:5435:14 nap.tv/c/util.(*element).toJS.func1(0x7ff8000100000947, 0x419e3d8, 0x398f350, 0x3, 0x3, 0x419e400, 0x8) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/util/custom_element.go:151 +0x14 localhost:8080:5435:14 syscall/js.handleEvent() localhost:8080:5435:14 /Users/thetv/goroot/src/syscall/js/func.go:95 +0x24 localhost:8080:5435:14 syscall/js.Value.Call(0x7ff8000100000947, 0x419e3a8, 0x14b71e, 0xc, 0x39bd958, 0x2, 0x2, 0x3aef2b0, 0x40f8000) localhost:8080:5435:14 /Users/thetv/goroot/src/syscall/js/js.go:390 +0x3 localhost:8080:5435:14 github.local/mihai/html.nodeJS.SetAttribute(...) localhost:8080:5435:14 /Users/thetv/go/src/github.local/mihai/html/node_js.go:65 localhost:8080:5435:14 github.local/mihai/html.setFieldToNode(0x3010080, 0x4381ec0, 0x42feae0, 0x7b500, 0x36c4a00, 0x98, 0x419e3a8, 0x7b500) localhost:8080:5435:14 /Users/thetv/go/src/github.local/mihai/html/node_marshal.go:220 +0x14 localhost:8080:5435:14 github.local/mihai/html.marshalFieldToNode(0x3010080, 0x4381ec0, 0x3011cc0, 0x7b500, 0x7b500, 0x36c4a00, 0x98, 0x42feae0, 0x575c5, 0x8) localhost:8080:5435:14 /Users/thetv/go/src/github.local/mihai/html/node_marshal.go:21 +0x6b localhost:8080:5435:14 github.local/mihai/html.marshalStruct(0x3010080, 0x4381e90, 0x3011cc0, 0xb61c0, 0xb61c0, 0x36c4a00, 0x99, 0x4381e90, 0x39bde80) localhost:8080:5435:14 /Users/thetv/go/src/github.local/mihai/html/node_marshal.go:163 +0x30 localhost:8080:5435:14 github.local/mihai/html.marshalFieldToNode(0x3010080, 0x4381e90, 0x3011cc0, 0xb61c0, 0xb61c0, 0x36c4a00, 0x99, 0x0, 0x7ff8000200000091, 0x419e380) localhost:8080:5435:14 /Users/thetv/go/src/github.local/mihai/html/node_marshal.go:89 +0xb3 localhost:8080:5435:14 github.local/mihai/html.MarshalJS(0x7ff800010000031d, 0x38ff3c0, 0xb61c0, 0x36c4a00, 0x3006e40, 0x4251c80) localhost:8080:5435:14 /Users/thetv/go/src/github.local/mihai/html/html_js.go:23 +0x20 localhost:8080:5435:14 nap.tv/c/ui/video.(*Element).Throw(0x389e3c0, 0x3006e40, 0x4250880, 0x7ff800010000031d, 0x38ff3c0, 0x0, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/video/element.go:236 +0x4 localhost:8080:5435:14 nap.tv/c/ui/video.(*Element).AttributeChangedCallback.func1(0x389e3c0, 0x3006e40, 0x4250880, 0x7ff800010000031d, 0x38ff3c0, 0x42a0dc0, 0xae) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/video/element.go:193 +0x2 localhost:8080:5435:14 created by nap.tv/c/ui/video.(*Element).AttributeChangedCallback localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/video/element.go:192 +0x67 localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1081 [semacquire]: localhost:8080:5435:14 sync.runtime_SemacquireMutex(0x36ab47c, 0x4100000000, 0x1) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:71 +0x2 localhost:8080:5435:14 sync.(*Mutex).lockSlow(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:138 +0x23 localhost:8080:5435:14 sync.(*Mutex).Lock(0x36ab478) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/mutex.go:81 +0x7 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).output(0x36ab460, 0x2, 0x3a5d500, 0x35d80cc, 0xc, 0x41, 0x0) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:672 +0x4 localhost:8080:5435:14 github.com/golang/glog.(*loggingT).printf(0x36ab460, 0x2, 0x397dda0, 0x12, 0x3a22100, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:655 +0xe localhost:8080:5435:14 github.com/golang/glog.Errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/github.com/golang/glog/glog.go:1121 localhost:8080:5435:14 thep.uk/log/stderr.errorf(...) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:65 localhost:8080:5435:14 thep.uk/log/stderr.std.Log(0x3006ec0, 0x424d020, 0x1f4, 0x397dda0, 0x12, 0x3a22100, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/stderr/stderr_js.go:55 +0xf localhost:8080:5435:14 thep.uk/log.Errorf(0x3006ec0, 0x424d020, 0x14c8fe, 0xe, 0x3a22100, 0x3, 0x4) localhost:8080:5435:14 /Users/thetv/go/src/thep.uk/log/log.go:44 +0x10 localhost:8080:5435:14 nap.tv/c/res.Get.func1(0x3006ec0, 0x424d020) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:187 +0x14 localhost:8080:5435:14 nap.tv/c/res.Get(0x3006e40, 0x3ada0c0, 0x41ec8c0, 0x67, 0x417b6e0, 0x1, 0x1, 0x4055700, 0x0, 0x0, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/client.go:255 +0x15 localhost:8080:5435:14 nap.tv/c/res.fromResourceType(0x3006e40, 0x3ada0c0, 0x41ec8c0, 0x67, 0x42aa5e0, 0xf, 0x7a, 0x0, 0x0, 0x1aa10009, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/common.go:72 +0x13 localhost:8080:5435:14 nap.tv/c/res.From(0x3006e40, 0x3ada0c0, 0x41ec8c0, 0x67, 0x42aa5e0, 0xf, 0x0, 0x0, 0x76280, 0x424ce90, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/res/common.go:24 +0x4e localhost:8080:5435:14 nap.tv/c/ui/sidebar.mediaURIFromItem(0x3006e40, 0x3ada0c0, 0x41ec8c0, 0x67, 0x42aa5e0, 0xf, 0x0, 0x7ff800020000094d, 0x42aa4c8, 0x15010007, ...) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/sidebar/sidebar.go:337 +0xa localhost:8080:5435:14 nap.tv/c/ui/sidebar.(*Element).updateMedia(0x42adbc0, 0x3006e40, 0x3ada0c0, 0x7ff8000100000322, 0x3b78710, 0x7ff8000100000053, 0x42aa400) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/sidebar/sidebar.go:296 +0x32 localhost:8080:5435:14 nap.tv/c/ui/sidebar.(*Element).focus.func1(0x40551c0, 0x1, 0x1, 0x3006e40, 0x3ada0c0, 0x42adbc0, 0x7ff8000100000322, 0x3b78710) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/sidebar/sidebar.go:114 +0x12 localhost:8080:5435:14 created by nap.tv/c/ui/sidebar.(*Element).focus localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/ui/sidebar/sidebar.go:105 +0x3 localhost:8080:5435:14 localhost:8080:5435:14 goroutine 1087 [semacquire]: localhost:8080:5435:14 sync.runtime_Semacquire(0x3ad8cc8) localhost:8080:5435:14 /Users/thetv/goroot/src/runtime/sema.go:56 +0x2 localhost:8080:5435:14 sync.(*WaitGroup).Wait(0x3ad8cc0) localhost:8080:5435:14 /Users/thetv/goroot/src/sync/waitgroup.go:130 +0x10 localhost:8080:5435:14 nap.tv/c/handler/multisearch.fromCursors.func2(0x3ad8cc0, 0x425c2a0, 0x3006f00, 0x3b715f0) localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:254 +0x2 localhost:8080:5435:14 created by nap.tv/c/handler/multisearch.fromCursors localhost:8080:5435:14 /Users/thetv/go/src/nap.tv/c/handler/multisearch/multisearch.go:253 +0xc localhost:8080:5435:14 exit code: 2 localhost:8080:5526:14 HTTP load failed with status 502. Load of media resource http://ckjh.streamon.fm:8000/CKJH-64k-m.mp3 failed. play_page This error message will be blank when privacy.resistFingerprinting = true. If it is really necessary, please add it to the whitelist in MediaError::GetMessage: 502: Bad Gateway 2 localhost:8080:4999:333 Script terminated by timeout at: runtime.findrunnable@http://localhost:8080/app.wasm:wasm-function[595]:0x8487d runtime.schedule@http://localhost:8080/app.wasm:wasm-function[600]:0x87e0a runtime.park_m@http://localhost:8080/app.wasm:wasm-function[603]:0x88c90 runtime.mcall@http://localhost:8080/app.wasm:wasm-function[984]:0xd440e runtime.gopark@http://localhost:8080/app.wasm:wasm-function[544]:0x7a6b9 runtime.semacquire1@http://localhost:8080/app.wasm:wasm-function[671]:0x9af45 sync.runtime_SemacquireMutex@http://localhost:8080/app.wasm:wasm-function[963]:0xd259c sync.__Mutex_.lockSlow@http://localhost:8080/app.wasm:wasm-function[1236]:0xeb97a sync.__Mutex_.Lock@http://localhost:8080/app.wasm:wasm-function[1235]:0xeb51f github.com_golang_glog.__loggingT_.output@http://localhost:8080/app.wasm:wasm-function[8022]:0x716cfe github.com_golang_glog.__loggingT_.printf@http://localhost:8080/app.wasm:wasm-function[8021]:0x716a75 thep.uk_log_stderr.std.Log@http://localhost:8080/app.wasm:wasm-function[8086]:0x71daf1 thep.uk_log_stderr.__std_.Log@http://localhost:8080/app.wasm:wasm-function[8088]:0x71dd80 thep.uk_log.Errorf@http://localhost:8080/app.wasm:wasm-function[5928]:0x5080ea nap.tv_c_res.Get.func1@http://localhost:8080/app.wasm:wasm-function[8969]:0x82e2a2 wasm_pc_f_loop@http://localhost:8080/app.wasm:wasm-function[1034]:0xd6e91 wasm_export_resume@http://localhost:8080/app.wasm:wasm-function[1033]:0xd6e72 _resume@http://localhost:8080/:5932:23 _makeFuncWrapper/<@http://localhost:8080/:5943:8 attributeChangedCallback@http://localhost:8080/:5333:18 syscall/js.valueCall@http://localhost:8080/:5771:31 syscall_js.valueCall@http://localhost:8080/app.wasm:wasm-function[1331]:0xf9d32 syscall_js.Value.Call@http://localhost:8080/app.wasm:wasm-function[1308]:0xf7295 github.com_themihai_html.__nodeJS_.SetAttribute@http://localhost:8080/app.wasm:wasm-function[8631]:0x7b8c1d github.com_themihai_html.setFieldToNode@http://localhost:8080/app.wasm:wasm-function[8587]:0x7ae284 github.com_themihai_html.marshalFieldToNode@http://localhost:8080/app.wasm:wasm-function[8584]:0x7abc59 github.com_themihai_html.marshalStruct@http://localhost:8080/app.wasm:wasm-function[8585]:0x7acf2c github.com_themihai_html.marshalFieldToNode@http://localhost:8080/app.wasm:wasm-function[8584]:0x7ac425 github.com_themihai_html.MarshalJS@http://localhost:8080/app.wasm:wasm-function[8562]:0x7a7f95 nap.tv_c_ui_video.__Element_.Throw@http://localhost:8080/app.wasm:wasm-function[10567]:0xa2e402 wasm_pc_f_loop@http://localhost:8080/app.wasm:wasm-function[1034]:0xd6e91 wasm_export_resume@http://localhost:8080/app.wasm:wasm-function[1033]:0xd6e72 _resume@http://localhost:8080/:5932:23 _makeFuncWrapper/<@http://localhost:8080/:5943:8 write@http://localhost:8080/:5446:13 syscall/js.valueCall@http://localhost:8080/:5771:31 syscall_js.valueCall@http://localhost:8080/app.wasm:wasm-function[1331]:0xf9d32 syscall_js.Value.Call@http://localhost:8080/app.wasm:wasm-function[1308]:0xf7295 syscall.fsCall@http://localhost:8080/app.wasm:wasm-function[1477]:0x108fbe syscall.Write@http://localhost:8080/app.wasm:wasm-function[1473]:0x107d36 internal_poll.__FD_.Write@http://localhost:8080/app.wasm:wasm-function[1710]:0x131cef os.__File_.Write@http://localhost:8080/app.wasm:wasm-function[1772]:0x13b358 github.com_golang_glog.__loggingT_.output@http://localhost:8080/app.wasm:wasm-function[8022]:0x7177da github.com_golang_glog.__loggingT_.printf@http://localhost:8080/app.wasm:wasm-function[8021]:0x716a75 thep.uk_log_stderr.std.Log@http://localhost:8080/app.wasm:wasm-function[8086]:0x71db5d thep.uk_log_stderr.__std_.Log@http://localhost:8080/app.wasm:wasm-function[8088]:0x71dd80 thep.uk_log.Infof@http://localhost:8080/app.wasm:wasm-function[5932]:0x508fd8 nap.tv_c_ui_video.__Element_.AttributeChangedCallback@http://localhost:8080/app.wasm:wasm-function[10566]:0xa2dc2b nap.tv_c_util.AttributeChanger.AttributeChangedCallback_fm@http://localhost:8080/app.wasm:wasm-function[8715]:0x7c6f03 nap.tv_c_util.__element_.toJS.func2.1@http://localhost:8080/app.wasm:wasm-function[8693]:0x7c327e wasm_pc_f_loop@http://localhost:8080/app.wasm:wasm-function[1034]:0xd6e91 wasm_export_resume@http://localhost:8080/app.wasm:wasm-function[1033]:0xd6e72 _resume@http://localhost:8080/:5932:23 _makeFuncWrapper/<@http://localhost:8080/:5943:8 ShakaPlayerLoad@http://localhost:8080/:5299:18
ianlancetaylor commented 4 years ago

CC @neelance

neelance commented 4 years ago

I managed to debug the issue. What is happening is that https://github.com/golang/go/blob/b0a87544754a41312aa454f69d4e820979f19ef0/src/runtime/lock_js.go#L196-L200 wakes up the innermost event handler, but then findrunnable of proc.go schedules a different goroutine instead of the e.gp here. This messes up the wasm event handling. It is a bit strange that another goroutine gets scheduled because the code above (beforeIdle) got called because no goroutine was awake any more. I guess there is some internal timer logic that if triggered at the very right moment makes some goroutine available.

I see three possible solutions:

  1. Make the event handler detect this situation and go to sleep once more. This can be done by changing https://github.com/golang/go/blob/b0a87544754a41312aa454f69d4e820979f19ef0/src/runtime/lock_js.go#L243 to
    gopark(nil, nil, waitReasonZero, traceEvNone, 1)
    for events[len(events)-1] != e {
        gopark(nil, nil, waitReasonZero, traceEvNone, 1)
    }
  2. Make findrunnable not check the timers. One way to do this is to change https://github.com/golang/go/blob/b0a87544754a41312aa454f69d4e820979f19ef0/src/runtime/proc.go#L2276-L2279 to
    if beforeIdle(delta) {
        // At least one goroutine got woken.
        if gp, inheritTime := runqget(_p_); gp != nil {
            return gp, inheritTime
        }
        throw("findrunnable: no goroutine woken by beforeIdle")
    }
  3. Option 2 does not seem very clean to me. I guess there should be some way to make beforeIdle return the specific goroutine e.gp that needs to run next. I wasn't able to quickly figure out how to do this.

@ianlancetaylor @cherrymui I am not sure which way is a good solution. Do you have any preference?

ianlancetaylor commented 4 years ago

I like the idea of having beforeIdle return the goroutine to run. I think findrunnable could handle it just as it handles the case of netpoll returning a goroutine: call casgstatus and traceGoUnpark, and return it.

cherrymui commented 4 years ago

Yeah, I like option 3 as well. We may want to try that first.

Thanks for debugging this!

gopherbot commented 4 years ago

Change https://golang.org/cl/230178 mentions this issue: runtime: fix race condition between timer and event handler