{"action":"created","issue":{"url":"https://api.github.com/repos/grpc/grpc/issues/17416","repository_url":"https://api.github.com/repos/grpc/grpc","labels_url":"https://api.github.com/repos/grpc/grpc/issues/17416/labels{/name}","comments_url":"https://api.github.com/repos/grpc/grpc/issues/17416/comments","events_url":"https://api.github.com/repos/grpc/grpc/issues/17416/events","html_url":"https://github.com/grpc/grpc/pull/17416","id":387999821,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM2MzY1NDk2","number":17416,"title":"Fix client-side callback API race, allow reuse of application reactor structure","user":{"login":"vjpai","id":8864912,"node_id":"MDQ6VXNlcjg4NjQ5MTI=","avatar_url":"https://avatars0.githubusercontent.com/u/8864912?v=4","gravatar_id":"","url":"https://api.github.com/users/vjpai","html_url":"https://github.com/vjpai","followers_url":"https://api.github.com/users/vjpai/followers","following_url":"https://api.github.com/users/vjpai/following{/other_user}","gists_url":"https://api.github.com/users/vjpai/gists{/gist_id}","starred_url":"https://api.github.com/users/vjpai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vjpai/subscriptions","organizations_url":"https://api.github.com/users/vjpai/orgs","repos_url":"https://api.github.com/users/vjpai/repos","events_url":"https://api.github.com/users/vjpai/events{/privacy}","received_events_url":"https://api.github.com/users/vjpai/received_events","type":"User","site_admin":false},"labels":[{"id":166332908,"node_id":"MDU6TGFiZWwxNjYzMzI5MDg=","url":"https://api.github.com/repos/grpc/grpc/labels/lang/c++","name":"lang/c++","color":"fad8c7","default":false},{"id":961832073,"node_id":"MDU6TGFiZWw5NjE4MzIwNzM=","url":"https://api.github.com/repos/grpc/grpc/labels/release%20notes:%20no","name":"release notes: no","color":"0f5f75","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2018-12-06T00:06:01Z","updated_at":"2018-12-06T17:19:20Z","closed_at":null,"author_association":"MEMBER","pull_request":{"url":"https://api.github.com/repos/grpc/grpc/pulls/17416","html_url":"https://github.com/grpc/grpc/pull/17416","diff_url":"https://github.com/grpc/grpc/pull/17416.diff","patch_url":"https://github.com/grpc/grpc/pull/17416.patch"},"body":"1. OnDone is already the last callback, but let it be after the destruction of the streaming object so that the reactor can be reused to start a new call\r\n1. Treat StartCall as an expected callback so that OnDone can't happen until StartCall completes\r\n\r\nThese are lumped as one PR since both of these can be considered races (the first was not explicitly allowed in the API, but it wasn't explicitly disallowed either)\r\n\r\nFixes #17375 \r\n"},"comment":{"url":"https://api.github.com/repos/grpc/grpc/issues/comments/444954174","html_url":"https://github.com/grpc/grpc/pull/17416#issuecomment-444954174","issue_url":"https://api.github.com/repos/grpc/grpc/issues/17416","id":444954174,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0NDk1NDE3NA==","user":{"login":"grpc-testing","id":28024233,"node_id":"MDQ6VXNlcjI4MDI0MjMz","avatar_url":"https://avatars1.githubusercontent.com/u/28024233?v=4","gravatar_id":"","url":"https://api.github.com/users/grpc-testing","html_url":"https://github.com/grpc-testing","followers_url":"https://api.github.com/users/grpc-testing/followers","following_url":"https://api.github.com/users/grpc-testing/following{/other_user}","gists_url":"https://api.github.com/users/grpc-testing/gists{/gist_id}","starred_url":"https://api.github.com/users/grpc-testing/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grpc-testing/subscriptions","organizations_url":"https://api.github.com/users/grpc-testing/orgs","repos_url":"https://api.github.com/users/grpc-testing/repos","events_url":"https://api.github.com/users/grpc-testing/events{/privacy}","received_events_url":"https://api.github.com/users/grpc-testing/received_events","type":"User","site_admin":false},"created_at":"2018-12-06T17:19:20Z","updated_at":"2018-12-06T17:19:20Z","author_association":"NONE","body":"```\n****************************************************************\n\nlibgrpc.so\n\n     VM SIZE        FILE SIZE\n ++++++++++++++  ++++++++++++++\n\n  [ = ]       0        0  [ = ]\n\n\n****************************************************************\n\nlibgrpc++.so\n\n     VM SIZE                                                                                            FILE SIZE\n ++++++++++++++ GROWING                                                                              ++++++++++++++\n  +0.0%    +112 [None]                                                                               +17.9Ki  +0.2%\n  +2.3% +1.21Ki src/cpp/client/generic_stub.cc                                                       +1.21Ki  +2.3%\n       +21%    +388 grpc::internal::ClientCallbackReaderWriterImpl<grpc::ByteBuffer, grpc::ByteBuffer>::    +388   +21%\n      +213%    +330 std::_Function_handler<void (bool), grpc::internal::ClientCallbackReaderWriterImpl<g    +330  +213%\n      +213%    +330 std::_Function_handler<void (bool), grpc::internal::ClientCallbackReaderWriterImpl<g    +330  +213%\n      +213%    +330 std::_Function_handler<void (bool), grpc::internal::ClientCallbackReaderWriterImpl<g    +330  +213%\n      +213%    +330 std::_Function_handler<void (bool), grpc::internal::ClientCallbackReaderWriterImpl<g    +330  +213%\n      +298%    +319 std::_Function_handler<void (bool), grpc::internal::ClientCallbackReaderWriterImpl<g    +319  +298%\n\n  +0.2% +1.32Ki TOTAL                                                                                +19.1Ki  +0.2%\n\n\n\n```"}}
{"actor":{"display_login":"grpc-testing"}}