Skip to content

Commit 1ec3dcd

Browse files
Merge pull request #162 from dmacvicar/libvirt-stream-usage-ensure-cleanup
Ensure libvirt stream are cleaned up properly
2 parents 7fbe405 + 47fa4ef commit 1ec3dcd

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

libvirt/utils_volume.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,21 +135,31 @@ func newImage(source string) (image, error) {
135135

136136
func newCopier(virConn *libvirt.Connect, volume *libvirt.StorageVol, size uint64) func(src io.Reader) error {
137137
copier := func(src io.Reader) error {
138+
var bytesCopied int64
139+
138140
stream, err := virConn.NewStream(0)
139141
if err != nil {
140142
return err
141143
}
142-
defer stream.Finish()
144+
145+
defer func() {
146+
if uint64(bytesCopied) != size {
147+
stream.Abort()
148+
} else {
149+
stream.Finish()
150+
}
151+
stream.Free()
152+
}()
143153

144154
volume.Upload(stream, 0, size, 0)
145155

146156
sio := NewStreamIO(*stream)
147157

148-
n, err := io.Copy(sio, src)
158+
bytesCopied, err = io.Copy(sio, src)
149159
if err != nil {
150160
return err
151161
}
152-
log.Printf("%d bytes uploaded\n", n)
162+
log.Printf("%d bytes uploaded\n", bytesCopied)
153163
return nil
154164
}
155165
return copier

0 commit comments

Comments
 (0)