{"action":"created","issue":{"url":"https://api.github.com/repos/docker/spdystream/issues/56","labels_url":"https://api.github.com/repos/docker/spdystream/issues/56/labels{/name}","comments_url":"https://api.github.com/repos/docker/spdystream/issues/56/comments","events_url":"https://api.github.com/repos/docker/spdystream/issues/56/events","html_url":"https://github.com/docker/spdystream/pull/56","id":104539931,"number":56,"title":"Fix possible data loss after goaway received","user":{"login":"ncdc","id":354,"avatar_url":"https://avatars.githubusercontent.com/u/354?v=3","gravatar_id":"","url":"https://api.github.com/users/ncdc","html_url":"https://github.com/ncdc","followers_url":"https://api.github.com/users/ncdc/followers","following_url":"https://api.github.com/users/ncdc/following{/other_user}","gists_url":"https://api.github.com/users/ncdc/gists{/gist_id}","starred_url":"https://api.github.com/users/ncdc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ncdc/subscriptions","organizations_url":"https://api.github.com/users/ncdc/orgs","repos_url":"https://api.github.com/users/ncdc/repos","events_url":"https://api.github.com/users/ncdc/events{/privacy}","received_events_url":"https://api.github.com/users/ncdc/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-09-02T18:04:25Z","updated_at":"2015-09-02T19:46:57Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/docker/spdystream/pulls/56","html_url":"https://github.com/docker/spdystream/pull/56","diff_url":"https://github.com/docker/spdystream/pull/56.diff","patch_url":"https://github.com/docker/spdystream/pull/56.patch"},"body":"All frames are processed by workers running in goroutines. If 1 worker's\r\nqueue is backed up with data frames and another worker receives and\r\nprocesses a goaway frame, it's a race as to whether or not the workers\r\nwill be able to process the pending data frames before the streams are\r\nremoved from the streams map.\r\n\r\nThis fix processes the goaway frame synchronously in Serve() instead of\r\nin a worker goroutine. We now wait for all the workers to drain their\r\nframe queues before tearing down the streams.\r\n\r\nFixes #55"},"comment":{"url":"https://api.github.com/repos/docker/spdystream/issues/comments/137224566","html_url":"https://github.com/docker/spdystream/pull/56#issuecomment-137224566","issue_url":"https://api.github.com/repos/docker/spdystream/issues/56","id":137224566,"user":{"login":"ncdc","id":354,"avatar_url":"https://avatars.githubusercontent.com/u/354?v=3","gravatar_id":"","url":"https://api.github.com/users/ncdc","html_url":"https://github.com/ncdc","followers_url":"https://api.github.com/users/ncdc/followers","following_url":"https://api.github.com/users/ncdc/following{/other_user}","gists_url":"https://api.github.com/users/ncdc/gists{/gist_id}","starred_url":"https://api.github.com/users/ncdc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ncdc/subscriptions","organizations_url":"https://api.github.com/users/ncdc/orgs","repos_url":"https://api.github.com/users/ncdc/repos","events_url":"https://api.github.com/users/ncdc/events{/privacy}","received_events_url":"https://api.github.com/users/ncdc/received_events","type":"User","site_admin":false},"created_at":"2015-09-02T19:46:57Z","updated_at":"2015-09-02T19:46:57Z","body":"@liggitt @smarterclayton FYI"}}