From 791b4039e4407c92e267cac3031cf1e8999b5013 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 28 Mar 2026 20:07:11 +0000 Subject: network/protocol: Flush ChunkWriter properly --- network/protocol/pktline/chunk_writer.go | 5 +++++ network/protocol/sideband64k/chunk_writer.go | 5 +++++ .../protocol/v0v1/server/receivepack/session.go | 3 +-- network/protocol/v0v1/server/session.go | 24 ++++------------------ 4 files changed, 15 insertions(+), 22 deletions(-) diff --git a/network/protocol/pktline/chunk_writer.go b/network/protocol/pktline/chunk_writer.go index b258ff20..3e1a8c36 100644 --- a/network/protocol/pktline/chunk_writer.go +++ b/network/protocol/pktline/chunk_writer.go @@ -63,3 +63,8 @@ func (cw *ChunkWriter) ReadFrom(r io.Reader) (int64, error) { } } } + +// Flush flushes buffered output in the underlying transport. +func (cw *ChunkWriter) Flush() error { + return cw.enc.Flush() +} diff --git a/network/protocol/sideband64k/chunk_writer.go b/network/protocol/sideband64k/chunk_writer.go index f95f75d8..9ee4e9f8 100644 --- a/network/protocol/sideband64k/chunk_writer.go +++ b/network/protocol/sideband64k/chunk_writer.go @@ -62,3 +62,8 @@ func (cw *ChunkWriter) ReadFrom(r io.Reader) (int64, error) { } } } + +// Flush flushes buffered output in the underlying transport. +func (cw *ChunkWriter) Flush() error { + return cw.enc.Flush() +} diff --git a/network/protocol/v0v1/server/receivepack/session.go b/network/protocol/v0v1/server/receivepack/session.go index d7b2a7c5..b4902df4 100644 --- a/network/protocol/v0v1/server/receivepack/session.go +++ b/network/protocol/v0v1/server/receivepack/session.go @@ -2,7 +2,6 @@ package receivepack import ( "fmt" - "io" "strings" "codeberg.org/lindenii/furgit/common/iowrap" @@ -181,7 +180,7 @@ func (session *Session) WriteError(p []byte) error { // ErrorWriter returns one chunking writer for sideband error output. // // When side-band-64k was not negotiated, writes are discarded. -func (session *Session) ErrorWriter() io.Writer { +func (session *Session) ErrorWriter() iowrap.WriteFlusher { return session.base.ErrorWriter() } diff --git a/network/protocol/v0v1/server/session.go b/network/protocol/v0v1/server/session.go index 45e14c92..23818014 100644 --- a/network/protocol/v0v1/server/session.go +++ b/network/protocol/v0v1/server/session.go @@ -97,19 +97,6 @@ func (session *Session) Flush() error { return session.enc.Flush() } -type flushWriter struct { - writer io.Writer - flush func() error -} - -func (w flushWriter) Write(p []byte) (int, error) { - return w.writer.Write(p) -} - -func (w flushWriter) Flush() error { - return w.flush() -} - // ProgressWriter returns one chunking writer for sideband progress output. // // When side-band-64k was not negotiated, writes are discarded. @@ -118,18 +105,15 @@ func (session *Session) ProgressWriter() iowrap.WriteFlusher { return iowrap.NopFlush(io.Discard) } - return flushWriter{ - writer: sideband64k.NewChunkWriter(session.sideband, sideband64k.BandProgress), - flush: session.sideband.Flush, - } + return sideband64k.NewChunkWriter(session.sideband, sideband64k.BandProgress) } // ErrorWriter returns one chunking writer for sideband error output. // // When side-band-64k was not negotiated, writes are discarded. -func (session *Session) ErrorWriter() io.Writer { +func (session *Session) ErrorWriter() iowrap.WriteFlusher { if !session.useSideBand { - return io.Discard + return iowrap.NopFlush(io.Discard) } return sideband64k.NewChunkWriter(session.sideband, sideband64k.BandError) @@ -139,7 +123,7 @@ func (session *Session) ErrorWriter() io.Writer { // // When side-band-64k is enabled, writes are chunked into band-1 sideband // frames. Otherwise writes are chunked into direct pkt-line data frames. -func (session *Session) PrimaryDataWriter() io.Writer { +func (session *Session) PrimaryDataWriter() iowrap.WriteFlusher { if session.useSideBand { return sideband64k.NewChunkWriter(session.sideband, sideband64k.BandData) } -- cgit v1.3.1-10-gc9f91