aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-22 23:23:32 +0000
committerGravatar Runxi Yu2026-03-22 23:23:32 +0000
commit98231f518208f77ee6e92291976a1512ad1da282 (patch)
tree9f82a593c47d35999ee38117c6501b2aeef6bf15
parent*: Fixup ownership of compositional backends (diff)
signatureNo signature
refstore/files: UB on use after close
-rw-r--r--refstore/files/close.go1
-rw-r--r--refstore/files/transaction.go5
-rw-r--r--refstore/files/transaction_abort.go21
-rw-r--r--refstore/files/transaction_commit.go15
-rw-r--r--refstore/files/transaction_queue.go7
5 files changed, 5 insertions, 44 deletions
diff --git a/refstore/files/close.go b/refstore/files/close.go
index 6dfe3668..58f400a5 100644
--- a/refstore/files/close.go
+++ b/refstore/files/close.go
@@ -3,6 +3,7 @@ package files
// Close releases resources associated with the store.
//
// Store borrows gitRoot, so Close does not close it.
+// Transactions and batches borrowing the store are invalid after Close.
//
// Repeated calls to Close are undefined behavior.
func (store *Store) Close() error {
diff --git a/refstore/files/transaction.go b/refstore/files/transaction.go
index 09b92caf..b3132d3e 100644
--- a/refstore/files/transaction.go
+++ b/refstore/files/transaction.go
@@ -5,9 +5,8 @@ import (
)
type Transaction struct {
- store *Store
- ops []txOp
- closed bool
+ store *Store
+ ops []txOp
}
var _ refstore.Transaction = (*Transaction)(nil)
diff --git a/refstore/files/transaction_abort.go b/refstore/files/transaction_abort.go
index 7b92472c..cb82e4bf 100644
--- a/refstore/files/transaction_abort.go
+++ b/refstore/files/transaction_abort.go
@@ -1,22 +1,3 @@
package files
-import "fmt"
-
-func (tx *Transaction) Abort() error {
- err := tx.ensureOpen()
- if err != nil {
- return err
- }
-
- tx.closed = true
-
- return nil
-}
-
-func (tx *Transaction) ensureOpen() error {
- if tx.closed {
- return fmt.Errorf("refstore/files: transaction already closed")
- }
-
- return nil
-}
+func (tx *Transaction) Abort() error { return nil }
diff --git a/refstore/files/transaction_commit.go b/refstore/files/transaction_commit.go
index eba959cb..dae4d8ee 100644
--- a/refstore/files/transaction_commit.go
+++ b/refstore/files/transaction_commit.go
@@ -6,15 +6,8 @@ import (
)
func (tx *Transaction) Commit() error {
- err := tx.ensureOpen()
- if err != nil {
- return err
- }
-
prepared, err := tx.prepare()
if err != nil {
- tx.closed = true
-
return err
}
@@ -29,16 +22,12 @@ func (tx *Transaction) Commit() error {
err = tx.writeLoose(item)
if err != nil {
- tx.closed = true
-
return err
}
}
err = tx.applyPackedDeletes(prepared)
if err != nil {
- tx.closed = true
-
return err
}
@@ -48,8 +37,6 @@ func (tx *Transaction) Commit() error {
if item.target.ref.isLoose {
err = tx.store.rootFor(item.target.loc.root).Remove(item.target.loc.path)
if err != nil && !errors.Is(err, os.ErrNotExist) {
- tx.closed = true
-
return err
}
@@ -59,7 +46,5 @@ func (tx *Transaction) Commit() error {
}
}
- tx.closed = true
-
return nil
}
diff --git a/refstore/files/transaction_queue.go b/refstore/files/transaction_queue.go
index 59b49419..0000bc27 100644
--- a/refstore/files/transaction_queue.go
+++ b/refstore/files/transaction_queue.go
@@ -1,12 +1,7 @@
package files
func (tx *Transaction) queue(op txOp) error {
- err := tx.ensureOpen()
- if err != nil {
- return err
- }
-
- err = tx.validateOp(op)
+ err := tx.validateOp(op)
if err != nil {
return err
}