Skip to content

Commit bd16e6f

Browse files
committedMar 19, 2020
groot/rtree: make tree.writer close idempotent
This allows to reliably defer Writer.Close()
1 parent e37e865 commit bd16e6f

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed
 

‎groot/rtree/rw_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -1172,6 +1172,7 @@ func TestTreeRW(t *testing.T) {
11721172
if err != nil {
11731173
t.Fatalf("could not create tree writer: %v", err)
11741174
}
1175+
defer tw.Close()
11751176
for i, b := range tw.Branches() {
11761177
if got, want := b.Name(), tc.wvars[i].Name; got != want {
11771178
t.Fatalf("branch[%d]: got=%q, want=%q", i, got, want)
@@ -1386,6 +1387,7 @@ func TestTreeWriteSubdir(t *testing.T) {
13861387
if err != nil {
13871388
t.Fatalf("could not create tree: %+v", err)
13881389
}
1390+
defer ntup.Close()
13891391

13901392
for i := 0; i < 5; i++ {
13911393
data.I32 = int32(i)

‎groot/rtree/writer.go

+9
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ func WithTitle(title string) WriteOption {
9797
type wtree struct {
9898
ttree
9999
wvars []WriteVar
100+
101+
closed bool
100102
}
101103

102104
// WriteVar describes a variable to be written out to a tree.
@@ -311,6 +313,13 @@ func (w *wtree) Flush() error {
311313

312314
// Close writes metadata and closes the tree.
313315
func (w *wtree) Close() error {
316+
if w.closed {
317+
return nil
318+
}
319+
defer func() {
320+
w.closed = true
321+
}()
322+
314323
if err := w.Flush(); err != nil {
315324
return fmt.Errorf("rtree: could not flush tree %q: %w", w.Name(), err)
316325
}

‎groot/rtree/writer_example_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ func Example_createFlatNtuple() {
4848
if err != nil {
4949
log.Fatalf("could not create tree writer: %+v", err)
5050
}
51+
defer tree.Close()
5152

5253
fmt.Printf("-- created tree %q:\n", tree.Name())
5354
for i, b := range tree.Branches() {
@@ -169,6 +170,7 @@ func Example_createFlatNtupleWithLZMA() {
169170
if err != nil {
170171
log.Fatalf("could not create tree writer: %+v", err)
171172
}
173+
defer tree.Close()
172174

173175
fmt.Printf("-- created tree %q:\n", tree.Name())
174176
for i, b := range tree.Branches() {
@@ -282,6 +284,7 @@ func Example_createFlatNtupleFromStruct() {
282284
if err != nil {
283285
log.Fatalf("could not create tree writer: %+v", err)
284286
}
287+
defer tree.Close()
285288

286289
fmt.Printf("-- created tree %q:\n", tree.Name())
287290
for i, b := range tree.Branches() {

0 commit comments

Comments
 (0)
Please sign in to comment.