File tree Expand file tree Collapse file tree 1 file changed +13
-6
lines changed Expand file tree Collapse file tree 1 file changed +13
-6
lines changed Original file line number Diff line number Diff line change @@ -127,6 +127,15 @@ func (m *Migration) Buffer() error {
127127
128128 b := bufio .NewReaderSize (m .Body , int (m .BufferSize ))
129129
130+ var bufferWriterCloseErr error
131+ // Always close bufferWriter, even on error, to prevent deadlocks.
132+ // This lets Buffer know that there is no more data coming.
133+ defer func () {
134+ if err := m .bufferWriter .Close (); err != nil {
135+ bufferWriterCloseErr = err
136+ }
137+ }()
138+
130139 // start reading from body, peek won't move the read pointer though
131140 // poor man's solution?
132141 if _ , err := b .Peek (int (m .BufferSize )); err != nil && err != io .EOF {
@@ -145,16 +154,14 @@ func (m *Migration) Buffer() error {
145154 m .FinishedReading = time .Now ()
146155 m .BytesRead = n
147156
148- // close bufferWriter so Buffer knows that there is no
149- // more data coming
150- if err := m .bufferWriter .Close (); err != nil {
151- return err
152- }
153-
154157 // it's safe to close the Body too
155158 if err := m .Body .Close (); err != nil {
156159 return err
157160 }
158161
162+ if bufferWriterCloseErr != nil {
163+ return bufferWriterCloseErr
164+ }
165+
159166 return nil
160167}
You can’t perform that action at this time.
0 commit comments