在某些构建中,页面已被释放
抱歉再提一个问题... 我已经检查了另外两个问题,不认为它们与我的案件相符。
我错了
恐慌: 第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