百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
返回工具页/返回 Issues 列表
#749·bolt

在某些构建中,页面已被释放

作者: tehsphinx创建于 2018年3月26日更新于 2018年3月26日

抱歉再提一个问题... 我已经检查了另外两个问题,不认为它们与我的案件相符。

我错了

恐慌: 第4页已释放 翻译: goroutine 416 [运行]: ./vendor/GitHub.com/boltdb/bolt. (* freelist).free(0x202f7ec0,0x5,0x0,0x301400). /ext-go/1/src/./vendor/GitHub.com/boltdb/bolt/freelist.go:121+0x263 ./vendor/GitHub.com/boltdb/bolt. (*node). spill(0x20356d40,0x2064bc64,0x6). /ext-go/1/src/./vendor/GitHub.com/boltdb/bolt/node.go:363+0x19f ./vendor/GitHub.com/boltdb/bolt. (*Bucket). spill(0x2032eb0c,0xe,0x38554104) (中文(简体) ). ext-go/1/src/./vendor/GitHub.com/boltdb/bolt/bucket.go:570+0x13d ./vendor/GitHub.com/boltdb/bolt. (*Tx). Committ(0x2032eb00,0x0,0x0) (中文(简体) ). ext-go/1/src/./vendor/GitHub.com/boltdb/bolt/tx.go:163+0xff ./vendor/GitHub.com/boltdb/bolt. (*DB). Update(0x20244fc0,0x2056de80,0x0,0x0). /ext-go/1/src/./vendor/GitHub.com/boltdb/bolt/db.go:605+0xc9

我的密码片段:

// 在 db 中添加一个值, 使用下个顺序自动添加密钥
func (s *DB) 添加(表名字符串,值 []字节) (int64, 出错) {
var id uint64 (英语).
错误 := s. Con. Update (func(tx *bolt.Tx)) 错误 {
bt, 错误 : = tx. CreateBucket If NotExists ([]字节(表Name))
如果错误 ! = 无 {
返回错误
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

id, 错误 = bt. NextSequence( )
如果错误 ! = 无 {
返回错误
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

返回 bt.Put(itob(id),值)
) (中文(简体) ).
返回ID,错误。 带有Stack( err) 选项
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

/ itob 返回 8字节大端代表 v.
func Itob(i uint64) [字节 {
b:= 成([ 字节,8)
二进制. BigEndian.PutUint64(b,一) 互联网档案馆的存檔,存档日期2013-12-2.
返回 b
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

错误发生在第二次执行此代码时( 每次) 。

代码运行在MacOS(amd64)和Windows(386)上,没有cgo. 禁用 cgo 禁用一些使用窗口 dll 的软件包 。 在使用`xgo-targers=windows/386 ' 用cgo(和dlls)编译最终版本时,产生的窗口可执行性将显示上述问题。

我给螺栓密码加了一些日志 检查了哪些页被解禁 每一次通话都解开同样的页子。 节点上的`node.pgid',go:363在每次呼叫中也是一样的(呼叫相隔几秒)。 为什么?

由于关于这个话题的其他问题之一, 谈论了种族状况, 这也没有解决问题:

// 在 db 中添加一个值, 使用下个顺序自动添加密钥
func (s *DB) 添加(表名字符串,值 []字节) (int64, 出错) {
// 添加此选项是为了确保没有其他同时使用字节数组的goroutine
var val Copy = make([]字节,0,len(值))
valCopy = 附录(valCopy,值.)

var id uint64 (英语).
chErr:= make(chan 错误)
s. run(s. act) 行动
s. 动作 <- func () {
错误 := s. Con. Update (func(tx *bolt.Tx)) 错误 {
bt, 错误 : = tx. CreateBucket If NotExists ([]字节(表Name))
如果错误 ! = 无 {
返回错误
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

id,错误=
. . . . . . .

内容来源: boltdb/bolt

查看 GitHub 原文在 GitHub 查看讨论