Skip to content

Commit

Permalink
Merge branch 'master' into e35_mdbx_v0_13
Browse files Browse the repository at this point in the history
  • Loading branch information
AskAlexSharov committed Jun 15, 2024
2 parents 2d7f0e7 + e921652 commit c901b9c
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 51 deletions.
2 changes: 1 addition & 1 deletion dbg/pprof_cgo.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
package dbg

import (
_ "github.com/benesch/cgosymbolizer"
_ "github.com/ianlancetaylor/cgosymbolizer"
)
5 changes: 1 addition & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,4 @@ module github.com/erigontech/mdbx-go

go 1.15

require (
github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b
github.com/ianlancetaylor/cgosymbolizer v0.0.0-20240503222823-736c933a666d // indirect
)
require github.com/ianlancetaylor/cgosymbolizer v0.0.0-20240503222823-736c933a666d
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b h1:5JgaFtHFRnOPReItxvhMDXbvuBkjSWE+9glJyF466yw=
github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b/go.mod h1:eMD2XUcPsHYbakFEocKrWZp47G0MRJYoC60qFblGjpA=
github.com/ianlancetaylor/cgosymbolizer v0.0.0-20240503222823-736c933a666d h1:Azx2B59D4+zpVVtuYb8Oe3uOLi/ift4xfwKdhBX0Cy0=
github.com/ianlancetaylor/cgosymbolizer v0.0.0-20240503222823-736c933a666d/go.mod h1:DvXTE/K/RtHehxU8/GtDs4vFtfw64jJ3PaCnFri8CRg=
32 changes: 16 additions & 16 deletions mdbx/cursor.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,8 @@ func (c *Cursor) Get(setkey, setval []byte, op uint) (key, val []byte, err error
err = c.getVal2(setkey, setval, op)
}
if err != nil {
*c.txn.key = C.MDBX_val{}
*c.txn.val = C.MDBX_val{}
c.txn.key = C.MDBX_val{}
c.txn.val = C.MDBX_val{}
return nil, nil, err
}

Expand All @@ -171,15 +171,15 @@ func (c *Cursor) Get(setkey, setval []byte, op uint) (key, val []byte, err error
key = setkey
} else {
if op != LastDup && op != FirstDup {
key = castToBytes(c.txn.key)
key = castToBytes(&c.txn.key)
}
}
val = castToBytes(c.txn.val)
val = castToBytes(&c.txn.val)

// Clear transaction storage record storage area for future use and to
// prevent dangling references.
*c.txn.key = C.MDBX_val{}
*c.txn.val = C.MDBX_val{}
c.txn.key = C.MDBX_val{}
c.txn.val = C.MDBX_val{}

return key, val, nil
}
Expand All @@ -189,7 +189,7 @@ func (c *Cursor) Get(setkey, setval []byte, op uint) (key, val []byte, err error
//
// See mdb_cursor_get.
func (c *Cursor) getVal0(op uint) error {
ret := C.mdbx_cursor_get(c._c, c.txn.key, c.txn.val, C.MDBX_cursor_op(op))
ret := C.mdbx_cursor_get(c._c, &c.txn.key, &c.txn.val, C.MDBX_cursor_op(op))
return operrno("mdbx_cursor_get", ret)
}

Expand All @@ -205,8 +205,8 @@ func (c *Cursor) getVal1(setkey []byte, op uint) error {
ret := C.mdbxgo_cursor_get1(
c._c,
k, C.size_t(len(setkey)),
c.txn.key,
c.txn.val,
&c.txn.key,
&c.txn.val,
C.MDBX_cursor_op(op),
)
return operrno("mdbx_cursor_get", ret)
Expand All @@ -219,8 +219,8 @@ func (c *Cursor) getVal01(setval []byte, op uint) error {
ret := C.mdbxgo_cursor_get01(
c._c,
v, C.size_t(len(setval)),
c.txn.key,
c.txn.val,
&c.txn.key,
&c.txn.val,
C.MDBX_cursor_op(op),
)
return operrno("mdbx_cursor_get", ret)
Expand All @@ -242,7 +242,7 @@ func (c *Cursor) getVal2(setkey, setval []byte, op uint) error {
c._c,
k, C.size_t(len(setkey)),
v, C.size_t(len(setval)),
c.txn.key, c.txn.val,
&c.txn.key, &c.txn.val,
C.MDBX_cursor_op(op),
)
return operrno("mdbx_cursor_get", ret)
Expand Down Expand Up @@ -280,16 +280,16 @@ func (c *Cursor) PutReserve(key []byte, n int, flags uint) ([]byte, error) {
ret := C.mdbxgo_cursor_put1(
c._c,
k, C.size_t(len(key)),
c.txn.val,
&c.txn.val,
C.MDBX_put_flags_t(flags|C.MDBX_RESERVE),
)
err := operrno("mdbx_cursor_put", ret)
if err != nil {
*c.txn.val = C.MDBX_val{}
c.txn.val = C.MDBX_val{}
return nil, err
}
b := castToBytes(c.txn.val)
*c.txn.val = C.MDBX_val{}
b := castToBytes(&c.txn.val)
c.txn.val = C.MDBX_val{}
return b, nil
}

Expand Down
38 changes: 11 additions & 27 deletions mdbx/txn.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ const (
type Txn struct {
env *Env
_txn *C.MDBX_txn
key *C.MDBX_val
val *C.MDBX_val
key C.MDBX_val
val C.MDBX_val

errLogf func(format string, v ...interface{})

Expand Down Expand Up @@ -88,26 +88,10 @@ func beginTxn(env *Env, parent *Txn, flags uint) (*Txn, error) {
}

var ptxn *C.MDBX_txn
if parent == nil {
if flags&Readonly == 0 {
// In a write Txn we can use the shared, C-allocated key and value
// allocated by env, and freed when it is closed.
txn.key = env.ckey
txn.val = env.cval
} else {
// It is not easy to share C.MDBX_val values in this scenario unless
// there is a synchronized pool involved, which will increase
// overhead. Further, allocating these values with C will add
// overhead both here and when the values are freed.
txn.key = new(C.MDBX_val)
txn.val = new(C.MDBX_val)
}
} else {
if parent != nil {
// Because parent Txn objects cannot be used while a sub-Txn is active
// it is OK for them to share their C.MDBX_val objects.
ptxn = parent._txn
txn.key = parent.key
txn.val = parent.val
}
ret := C.mdbx_txn_begin(env._env, ptxn, C.MDBX_txn_flags_t(flags), &txn._txn)
if ret != success {
Expand Down Expand Up @@ -593,15 +577,15 @@ func (txn *Txn) Get(dbi DBI, key []byte) ([]byte, error) {
ret := C.mdbxgo_get(
txn._txn, C.MDBX_dbi(dbi),
k, C.size_t(len(key)),
txn.val,
&txn.val,
)
err := operrno("mdbx_get", ret)
if err != nil {
*txn.val = C.MDBX_val{}
txn.val = C.MDBX_val{}
return nil, err
}
b := castToBytes(txn.val)
*txn.val = C.MDBX_val{}
b := castToBytes(&txn.val)
txn.val = C.MDBX_val{}
return b, nil
}

Expand Down Expand Up @@ -637,16 +621,16 @@ func (txn *Txn) PutReserve(dbi DBI, key []byte, n int, flags uint) ([]byte, erro
ret := C.mdbxgo_put1(
txn._txn, C.MDBX_dbi(dbi),
k, C.size_t(len(key)),
txn.val,
&txn.val,
C.MDBX_put_flags_t(flags|C.MDBX_RESERVE),
)
err := operrno("mdbx_put", ret)
if err != nil {
*txn.val = C.MDBX_val{}
txn.val = C.MDBX_val{}
return nil, err
}
b := castToBytes(txn.val)
*txn.val = C.MDBX_val{}
b := castToBytes(&txn.val)
txn.val = C.MDBX_val{}
return b, nil
}

Expand Down
2 changes: 1 addition & 1 deletion mdbx/txn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1221,8 +1221,8 @@ func BenchmarkTxn_Put_append_noflag(b *testing.B) {
}

err = env.Update(func(txn *Txn) (err error) {
var k [8]byte
for i := 0; i < b.N; i++ {
var k [8]byte
binary.BigEndian.PutUint64(k[:], uint64(i))
err = txn.Put(db, k[:], k[:], 0)
if err != nil {
Expand Down

0 comments on commit c901b9c

Please sign in to comment.