objectbox-go icon indicating copy to clipboard operation
objectbox-go copied to clipboard

Relations of has many causes panic in armv7 device

Open levin-go opened this issue 6 months ago • 14 comments

The same code can run normally on my computer (x86 windows) and device (armv7 Linux) without using a one to many relationship. Once a one to many relationship is used, it can run normally on my computer (x86 Windows). But when my device (armv7 Linux ) is running, it will cause a panic.

Basic info

  • Objectbox version: objectbox-go v1.8.0
  • Objectbox lib version: libobjectbox.so v4.0.1
  • Device: x86 Windows and armv7 Linux
  • Reproducibility: always

Code

  • main.go
package main

import (
	"fmt"
	"github.com/objectbox/objectbox-go/objectbox"
	"objectboxTest/objectboxlib/model"
)

func initObjectBox() *objectbox.ObjectBox {
	objectBox, err := objectbox.NewBuilder().Model(model.ObjectBoxModel()).Directory("./opt").Build()
	if err != nil {
		fmt.Println(err)
		return nil
	}
	return objectBox
}

func main() {
	// load objectbox
	ob := initObjectBox()
	defer ob.Close() // In a server app, you would just keep ob and close on shutdown
	box := model.BoxForTask(ob)
	box2 := model.BoxForWorkers(ob)
	if box == nil || box2 == nil {
		panic("box ini fail")
	}
	worker1 := model.Workers{Name: "Petter", Age: 18}
	worker2 := model.Workers{Name: "Leven", Age: 28}
	workers := []*model.Workers{&worker1, &worker2}
	id, _ := box.Put(&model.Task{
		Text:    "Buy milk",
		Workers: workers,
	})
	tasks, err := box.Get(id) // Read
	if err != nil {
		fmt.Println("read err ", err)
		return
	}
	fmt.Println(tasks)
}

  • model/task.go
package model

//go:generate go run github.com/objectbox/objectbox-go/cmd/objectbox-gogen

// Put this on a new line to enable sync: // `objectbox:"sync"`
type Task struct {
	Id           uint64
	Text         string
	Name         string
	DataType     string
	Value        float64
	ValueStr     string
	DateCreated  int64
	DateFinished int64
	Workers      []*Workers
}

type Workers struct {
	Id   uint64
	Name string
	Age  int
}

Windows Log

&{6 Buy milk 0 0 0 [0xc000086020 0xc000086040]}

Linux (ARMV7) Log

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x13d6c8]

goroutine 1 [running, locked to thread]:
github.com/objectbox/objectbox-go/objectbox.dataVisitorDispatch(0xb55f17b0, 0x40, 0x4137c0)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/datavisitorc.go:43 +0x50
github.com/objectbox/objectbox-go/objectbox._Cfunc_obx_box_visit_many(0x2cdff0, 0x2ce078, 0x142d4c, 0x4137c0)
	_cgo_gotypes.go:745 +0x38
github.com/objectbox/objectbox-go/objectbox.(*Box).GetManyExisting.func2.1(0x5147b0, 0x5147e0, 0x4137c0)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/box.go:531 +0xc8
github.com/objectbox/objectbox-go/objectbox.(*Box).GetManyExisting.func2(0x4137c0)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/box.go:531 +0x70
github.com/objectbox/objectbox-go/objectbox.(*Box).readUsingVisitor.func2.1()
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/box.go:621 +0x24
github.com/objectbox/objectbox-go/objectbox.cCall(0x4d7cf4)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/c-tools.go:34 +0x20
github.com/objectbox/objectbox-go/objectbox.(*Box).readUsingVisitor.func2()
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/box.go:621 +0x4c
github.com/objectbox/objectbox-go/objectbox.(*ObjectBox).runInTxn(0x505860, 0x1, 0x4d7d64)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/objectbox.go:155 +0xcc
github.com/objectbox/objectbox-go/objectbox.(*ObjectBox).RunInReadTx(...)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/objectbox.go:110
github.com/objectbox/objectbox-go/objectbox.(*Box).readUsingVisitor(0x5147b0, 0x1, 0x4d7da0)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/box.go:620 +0x27c
github.com/objectbox/objectbox-go/objectbox.(*Box).GetManyExisting(0x5147b0, {0x4137b0, 0x2, 0x2})
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/box.go:533 +0x158
objectboxTest/objectboxlib/model.(*WorkersBox).GetManyExisting(...)
	/mnt/d/gitlab/tools/objectboxTest/objectboxlib/model/task.obx.go:617
objectboxTest/objectboxlib/model.task_EntityInfo.Load({{0x1}, 0x284bb4920ec6bdbe}, 0x505860, {0xb55f1680, 0x80, 0x80})
	/mnt/d/gitlab/tools/objectboxTest/objectboxlib/model/task.obx.go:170 +0x144
github.com/objectbox/objectbox-go/objectbox.(*Box).Get.func1()
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/box.go:479 +0x18c
github.com/objectbox/objectbox-go/objectbox.(*ObjectBox).runInTxn(0x505860, 0x1, 0x4d7f10)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/objectbox.go:155 +0xcc
github.com/objectbox/objectbox-go/objectbox.(*ObjectBox).RunInReadTx(...)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/objectbox.go:110
github.com/objectbox/objectbox-go/objectbox.(*Box).Get(0x514790, 0x3)
	/home/lich/go/pkg/mod/github.com/levin-go/[email protected]/objectbox/box.go:470 +0x80
objectboxTest/objectboxlib/model.(*TaskBox).Get(0x4d7f90, 0x3)
	/mnt/d/gitlab/tools/objectboxTest/objectboxlib/model/task.obx.go:258 +0x30
main.main()
	/mnt/d/gitlab/tools/objectboxTest/main.go:34 +0x198

levin-go avatar Aug 27 '24 03:08 levin-go