)]}'
{"metropolis/pkg/socksproxy/socksproxy.go":[{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"f4780ca79941f8b4f138162b7af16fc74a7d3c1e","unresolved":true,"context_lines":[{"line_number":215,"context_line":"\t// Pipe returned backend into connection."},{"line_number":216,"context_line":"\tgo func() {"},{"line_number":217,"context_line":"\t\tio.Copy(conRes.Backend, con)"},{"line_number":218,"context_line":"\t\tconRes.Backend.Close()"},{"line_number":219,"context_line":"\t}()"},{"line_number":220,"context_line":"\tio.Copy(con, conRes.Backend)"},{"line_number":221,"context_line":"\tconRes.Backend.Close()"}],"source_content_type":"text/x-go","patch_set":1,"id":"e8eba1da_13bf928c","line":218,"range":{"start_line":218,"start_character":2,"end_line":218,"end_character":22},"updated":"2023-03-23 11:09:59.000000000","message":"This now definitely gets closed twice (also after the reverse direction io.Copy), any reason for that?","commit_id":"3e5a4a21cc8b5b3fa142ab7e2bebe37fc7741ac4"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a424e8bda499737da1e088321c4f2bb42857c02e","unresolved":true,"context_lines":[{"line_number":215,"context_line":"\t// Pipe returned backend into connection."},{"line_number":216,"context_line":"\tgo func() {"},{"line_number":217,"context_line":"\t\tio.Copy(conRes.Backend, con)"},{"line_number":218,"context_line":"\t\tconRes.Backend.Close()"},{"line_number":219,"context_line":"\t}()"},{"line_number":220,"context_line":"\tio.Copy(con, conRes.Backend)"},{"line_number":221,"context_line":"\tconRes.Backend.Close()"}],"source_content_type":"text/x-go","patch_set":1,"id":"efc0c589_93c06ef4","line":218,"range":{"start_line":218,"start_character":2,"end_line":218,"end_character":22},"in_reply_to":"2f7a0bc6_529b24e9","updated":"2023-03-23 13:16:30.000000000","message":"AFAIK the only reason one side of the io.Copy would abort is because either of the TCP connections closed. This should theoretically also abort the other copy because one of its connections is thus also closed. But there might be edge cases here and according to the docs it is definitely acceptable to close the connection twice, so let\u0027s keep it.","commit_id":"3e5a4a21cc8b5b3fa142ab7e2bebe37fc7741ac4"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"80c9a5d6ef4d4b14bda7ec290436ad0246fd5596","unresolved":true,"context_lines":[{"line_number":215,"context_line":"\t// Pipe returned backend into connection."},{"line_number":216,"context_line":"\tgo func() {"},{"line_number":217,"context_line":"\t\tio.Copy(conRes.Backend, con)"},{"line_number":218,"context_line":"\t\tconRes.Backend.Close()"},{"line_number":219,"context_line":"\t}()"},{"line_number":220,"context_line":"\tio.Copy(con, conRes.Backend)"},{"line_number":221,"context_line":"\tconRes.Backend.Close()"}],"source_content_type":"text/x-go","patch_set":1,"id":"2f7a0bc6_529b24e9","line":218,"range":{"start_line":218,"start_character":2,"end_line":218,"end_character":22},"in_reply_to":"e8eba1da_13bf928c","updated":"2023-03-23 12:03:59.000000000","message":"So if one io.Copy dies due to an error, either of the two closes gets triggered, which in turns should force the other io.Copy to fail.\n\nDo you know a better pattern for this?","commit_id":"3e5a4a21cc8b5b3fa142ab7e2bebe37fc7741ac4"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0ecd2ba6ce48b58d67b3b201eb3f480bb23ccce3","unresolved":false,"context_lines":[{"line_number":215,"context_line":"\t// Pipe returned backend into connection."},{"line_number":216,"context_line":"\tgo func() {"},{"line_number":217,"context_line":"\t\tio.Copy(conRes.Backend, con)"},{"line_number":218,"context_line":"\t\tconRes.Backend.Close()"},{"line_number":219,"context_line":"\t}()"},{"line_number":220,"context_line":"\tio.Copy(con, conRes.Backend)"},{"line_number":221,"context_line":"\tconRes.Backend.Close()"}],"source_content_type":"text/x-go","patch_set":1,"id":"8a645431_36588360","line":218,"range":{"start_line":218,"start_character":2,"end_line":218,"end_character":22},"in_reply_to":"efc0c589_93c06ef4","updated":"2023-03-23 13:16:35.000000000","message":"Done","commit_id":"3e5a4a21cc8b5b3fa142ab7e2bebe37fc7741ac4"}]}
