Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backend: Error: VM call panic: unexpected object with id c00e762742cf910938141c9647849974ef56ce9d:30 #97

Closed
ajnavarro opened this issue Sep 23, 2023 · 4 comments · Fixed by #129

Comments

@ajnavarro
Copy link
Contributor

I got that error after having a match stuck, trying to refresh the browsers to start over.

@thehowl
Copy link
Member

thehowl commented Sep 24, 2023

I believe this was related to 7da3a8d, as the panic seems to be an issue with realm storage and this panic seemed to occur in relation to that. If nobody has seen this anymore I think we can close this

@thehowl
Copy link
Member

thehowl commented Sep 25, 2023

Nope, confirming this still happens. (always with the same hash.) I don't precise steps to follow, though this seems to happen on LobbyJoin from time to time.

Some more information:

  • unexpected object with id is yet another unhelpful error message: it is called when store.GetObject cannot find the object with the given ID.
  • The hash c00... is the sha256 sum of gno.land/r/demo/chess. (see go doc gnolang.HashBytes; printf 'gno.land/r/demo/chess' | sha256sum).

This is the stacktrace I get:

'msg:0,success:false,log:--= Error =--
Data: &errors.errorString{s:"unexpected object with id c00e762742cf910938141c9647849974ef56ce9d:29"}
Msg Traces:
    0  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gno.land/pkg/sdk/vm/keeper.go:266 - VM call panic: unexpected object with id c00e762742cf910938141c9647849974ef56ce9d:29
Machine:
    CheckTypes: false
	Op: [OpHalt OpExec OpBody OpPopResults OpExec OpBody OpRangeIter OpPopBlock OpBody OpPopResults OpExec OpBody OpDefine OpBody OpDefine OpRef OpStructLit OpEval OpEval OpEval OpEval OpBody OpReturn OpStructLit OpEval OpEval OpBody OpReturn]
	Values: (len: 12)
          #11 (NewBoard func()( gno.land/r/demo/chess.Board))
          #10 (typeval{gno.land/r/demo/chess.Position (0xc009766a80)} type{})
          #9 (NewPosition func()( gno.land/r/demo/chess.Position))
          #8 ("g1qw75vnhcmma85qpyupdde2ecv6fu0cs45flev7" std.Address)
          #7 ("g1malmzy5qlfe0d35l70axscmqm6nwc3aywm26xy" std.Address)
          #6 ("000000002" string)
          #5 (typeval{gno.land/r/demo/chess.Game (0xc009766a20)} type{})
          #4 (newGame func(caller std.Address,opponent std.Address,seconds int,increment int)( *gno.land/r/demo/chess.Game))
          #3 (lobbyMatch func(tc gno.land/r/demo/chess.tcLobby,p1 int,p2 int)())
          #2 (slice[(struct{(ref(c00e762742cf910938141c9647849974ef56ce9d:52) time.Time),(struct{(13924100730999799808 uint64),(1695606750000000001 int64),(%!!(MISSING)v(PANIC=String method: runtime error: invalid memory address or nil pointer dereference) *time.Location)} time.Time),(&0xc00cdec210.(*gno.land/r/demo/chess.Player) *gno.land/r/demo/chess.Player)} gno.land/r/demo/chess.lobbyPlayer),(struct{(struct{(13924100733147283456 uint64),(1695606752000000001 int64),(&0xc006d2e808.(*time.Location) *time.Location)} time.Time),(struct{(13924100733147283456 uint64),(1695606752000000001 int64),(&0xc006d2e808.(*time.Location) *time.Location)} time.Time),(&0xc00ce39980.(*gno.land/r/demo/chess.Player) *gno.land/r/demo/chess.Player)} gno.land/r/demo/chess.lobbyPlayer)] []gno.land/r/demo/chess.lobbyPlayer)
          #1 (refreshLobby func(tc gno.land/r/demo/chess.tcLobby)())
          #0 (LobbyJoin func(seconds int,increment int)())
	Exprs:
          #8 (const (make func(t type{},z ...interface{})( []gno.land/r/demo/chess.Move)))([]Move<VPBlock(3,4)>, (const (0 int)), (const (80 int)))
          #7 [](const-type uint64){(const (1957848132405881468 uint64))}
          #6 Position<VPBlock(3,1)>{B<VPField(0,0,B)>: NewBoard<VPBlock(3,69)>(), Moves<VPField(0,1,Moves)>: (const (make func(t type{},z ...interface{})( []gno.land/r/demo/chess.Move)))([]Move<VPBlock(3,4)>, (const (0 int)), (const (80 int))), Hashes<VPField(0,4,Hashes)>: [](const-type uint64){(const (1957848132405881468 uint64))}}
          #5 (const (1 gno.land/r/demo/chess.GameState))
          #4 caller<VPBlock(1,0)>
          #3 time<VPBlock(2,4)>.Now()
          #2 NewTimeControl<VPBlock(3,72)>(seconds<VPBlock(1,2)>, increment<VPBlock(1,3)>)
          #1 Game<VPBlock(3,0)>{ID<VPField(0,0,ID)>: id<VPBlock(1,7)>, White<VPField(0,1,White)>: caller<VPBlock(1,0)>, Black<VPField(0,2,Black)>: opponent<VPBlock(1,1)>, Position<VPField(0,3,Position)>: NewPosition<VPBlock(3,66)>(), State<VPField(0,4,State)>: (const (1 gno.land/r/demo/chess.GameState)), Creator<VPField(0,6,Creator)>: caller<VPBlock(1,0)>, CreatedAt<VPField(0,7,CreatedAt)>: time<VPBlock(2,4)>.Now(), Time<VPField(0,10,Time)>: NewTimeControl<VPBlock(3,72)>(seconds<VPBlock(1,2)>, increment<VPBlock(1,3)>)}
          #0 &(Game<VPBlock(3,0)>{ID<VPField(0,0,ID)>: id<VPBlock(1,7)>, White<VPField(0,1,White)>: caller<VPBlock(1,0)>, Black<VPField(0,2,Black)>: opponent<VPBlock(1,1)>, Position<VPField(0,3,Position)>: NewPosition<VPBlock(3,66)>(), State<VPField(0,4,State)>: (const (1 gno.land/r/demo/chess.GameState)), Creator<VPField(0,6,Creator)>: caller<VPBlock(1,0)>, CreatedAt<VPField(0,7,CreatedAt)>: time<VPBlock(2,4)>.Now(), Time<VPField(0,10,Time)>: NewTimeControl<VPBlock(3,72)>(seconds<VPBlock(1,2)>, increment<VPBlock(1,3)>)})
	Stmts:
          #10 bodyStmt[0/0/1]=(end)
          #9 bodyStmt[0/0/1]=(end)
          #8 bodyStmt[0/0/8]=if isBlack<VPBlock(2,6)> { g<VPBlock(2,8)>.White, g<VPBlock(2,8)>.Black = g<VPBlock(2,8)>.Black, g<VPBlock(2,8)>.White }*
          #7 bodyStmt[0/0/3]=if (const-type bool)(p1<VPBlock(2,1)> > p2<VPBlock(2,2)>) { p1<VPBlock(2,1)>, p2<VPBlock(2,2)> = p2<VPBlock(2,2)>, p1<VPBlock(2,1)> }*
          #6 return
          #5 bodyStmt[0/0/1]=return
          #4 bodyStmt[2/0/3]=(end)
          #3 bodyStmt[0/0/13]=(end)
          #2 return
          #1 bodyStmt[0/0/11]=(end)
          #0 return
	Blocks:
          @(1) Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc0043a9680,Source:func NewBoard()  Board<VPBlock(2...,Parent:0xc003f361e0)
            .res_0: (array[0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000] gno.land/r/demo/chess.Board)
 (s vals) @(1) Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc009348020,Source:func NewBoard()  Board<VPBlock(2...,Parent:0xc00cc118e0)
            .res_0: (nil gno.land/r/demo/chess.Board)
 (s typs) @(1) [gno.land/r/demo/chess.Board]
          @(2) Block(ID:c00e762742cf910938141c9647849974ef56ce9d:8,Addr:0xc003f361e0,Source:ref(gno.land/r/demo/chess/rules....,Parent:0xc003455680)
            (RefNode names not shown)
 (s vals) @(2) Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc00cc118e0,Source:file{ package chess; import erro...,Parent:0xc00cf5cde0)
            errors: (package(errors errors) package{})
            sort: (package(sort sort) package{})
            strconv: (package(strconv strconv) package{})
            strings: (package(strings strings) package{})
 (s typs) @(2) [package{} package{} package{} package{}]
          @(3) gno.land/r/demo/chess
	Blocks (other):
          #7 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc0043a94a0,Source:func NewPosition()  Position<VPB...,Parent:0xc003f361e0)
            .res_0: (struct{(array[0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000] gno.land/r/demo/chess.Board),(nil []gno.land/r/demo/chess.Move),(0 gno.land/r/demo/chess.PositionFlags),(0 uint16),(nil []uint64)} gno.land/r/demo/chess.Position)
 (static) #7 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc009202c20,Source:func NewPosition()  Position<VPB...,Parent:0xc00cc118e0)
            .res_0: (nil gno.land/r/demo/chess.Position)
          #6 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc004393860,Source:func newGame(caller std<VPBlock(...,Parent:0xc003455860)
            caller: ("g1malmzy5qlfe0d35l70axscmqm6nwc3aywm26xy" std.Address)
            opponent: ("g1qw75vnhcmma85qpyupdde2ecv6fu0cs45flev7" std.Address)
            seconds: (600 int)
            increment: (5 int)
            .res_0: (nil *gno.land/r/demo/chess.Game)
            games: (slice[(&0xc00cdd6ae0.(*gno.land/r/demo/chess.Game) *gno.land/r/demo/chess.Game)] []*gno.land/r/demo/chess.Game)
            isBlack: (true bool)
            id: ("000000002" string)
            g: (undefined)
 (static) #6 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc00cf5ac20,Source:func newGame(caller std<VPBlock(...,Parent:0xc001a58b20)
            caller: ( std.Address)
            opponent: ( std.Address)
            seconds: (0 int)
            increment: (0 int)
            .res_0: (nil *gno.land/r/demo/chess.Game)
            games: (nil []*gno.land/r/demo/chess.Game)
            isBlack: (false bool)
            id: ( string)
            g: (nil *gno.land/r/demo/chess.Game)
          #5 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc0043932c0,Source:func lobbyMatch(tc tcLobby<VPBlo...,Parent:0xc003f36000)
            tc: (1 gno.land/r/demo/chess.tcLobby)
            p1: (1 int)
            p2: (0 int)
            secs: (600 int)
            incr: (5 int)
            a1: ("g1malmzy5qlfe0d35l70axscmqm6nwc3aywm26xy" std.Address)
            a2: ("g1qw75vnhcmma85qpyupdde2ecv6fu0cs45flev7" std.Address)
            game: (undefined)
            nl: (undefined)
 (static) #5 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc009094820,Source:func lobbyMatch(tc tcLobby<VPBlo...,Parent:0xc0039f6b20)
            tc: (0 gno.land/r/demo/chess.tcLobby)
            p1: (0 int)
            p2: (0 int)
            secs: (0 int)
            incr: (0 int)
            a1: ( std.Address)
            a2: ( std.Address)
            game: (nil *gno.land/r/demo/chess.Game)
            nl: (nil []gno.land/r/demo/chess.lobbyPlayer)
          #4 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc0043930e0,Source:if (const-type bool)(force<VPBlo...,Parent:0xc0043925a0)
 (static) #4 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc0090af020,Source:if (const-type bool)(force<VPBlo...,Parent:0xc00be74020)
          #3 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc0043925a0,Source:for i<VPBlock(1,0)>, player<VPBl...,Parent:0xc0043745a0)
            i: (0 int)
            player: (struct{(struct{(13924100634363035648 uint64),(1695606660000000001 int64),(%!!(MISSING)v(PANIC=String method: runtime error: invalid memory address or nil pointer dereference) *time.Location)} time.Time),(struct{(13924100730999799808 uint64),(1695606750000000001 int64),(%!!(MISSING)v(PANIC=String method: runtime error: invalid memory address or nil pointer dereference) *time.Location)} time.Time),(&0xc00cdec210.(*gno.land/r/demo/chess.Player) *gno.land/r/demo/chess.Player)} gno.land/r/demo/chess.lobbyPlayer)
            force: (true bool)
 (static) #3 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc00be74020,Source:for i<VPBlock(1,0)>, player<VPBl...,Parent:0xc009094420)
            i: (0 int)
            player: (nil gno.land/r/demo/chess.lobbyPlayer)
            force: (false <untyped> bool)
          #2 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc0043745a0,Source:func refreshLobby(tc tcLobby<VPB...,Parent:0xc003f36000)
            tc: (1 gno.land/r/demo/chess.tcLobby)
            callerAddr: ("g1malmzy5qlfe0d35l70axscmqm6nwc3aywm26xy" std.Address)
            now: (struct{(13924100733147283456 uint64),(1695606752000000001 int64),(&0xc006d2e808.(*time.Location) *time.Location)} time.Time)
            sublob: (slice[(struct{(ref(c00e762742cf910938141c9647849974ef56ce9d:52) time.Time),(struct{(13924100730999799808 uint64),(1695606750000000001 int64),(%!!(MISSING)v(PANIC=String method: runtime error: invalid memory address or nil pointer dereference) *time.Location)} time.Time),(&0xc00cdec210.(*gno.land/r/demo/chess.Player) *gno.land/r/demo/chess.Player)} gno.land/r/demo/chess.lobbyPlayer),(struct{(struct{(13924100733147283456 uint64),(1695606752000000001 int64),(&0xc006d2e808.(*time.Location) *time.Location)} time.Time),(struct{(13924100733147283456 uint64),(1695606752000000001 int64),(&0xc006d2e808.(*time.Location) *time.Location)} time.Time),(&0xc00ce39980.(*gno.land/r/demo/chess.Player) *gno.land/r/demo/chess.Player)} gno.land/r/demo/chess.lobbyPlayer)] []gno.land/r/demo/chess.lobbyPlayer)
            callerPos: (1 int)
            caller: (struct{(struct{(13924100733147283456 uint64),(1695606752000000001 int64),(&0xc006d2e808.(*time.Location) *time.Location)} time.Time),(struct{(13924100733147283456 uint64),(1695606752000000001 int64),(&0xc006d2e808.(*time.Location) *time.Location)} time.Time),(&0xc00ce39980.(*gno.land/r/demo/chess.Player) *gno.land/r/demo/chess.Player)} gno.land/r/demo/chess.lobbyPlayer)
            cat: (2 gno.land/r/demo/chess.Category)
            callerRating: (1675.0722613335827 float64)
            callerForce: (false bool)
 (static) #2 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc009094420,Source:func refreshLobby(tc tcLobby<VPB...,Parent:0xc0039f6b20)
            tc: (0 gno.land/r/demo/chess.tcLobby)
            callerAddr: ( std.Address)
            now: (nil time.Time)
            sublob: (nil []gno.land/r/demo/chess.lobbyPlayer)
            callerPos: (0 int)
            caller: (undefined)
            cat: (0 gno.land/r/demo/chess.Category)
            callerRating: (0 float64)
            callerForce: (false <untyped> bool)
          #1 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc003f36f00,Source:func LobbyJoin(seconds (const-ty...,Parent:0xc003f36000)
            seconds: (600 int)
            increment: (5 int)
            tc: (1 gno.land/r/demo/chess.tcLobby)
            caller: ("g1malmzy5qlfe0d35l70axscmqm6nwc3aywm26xy" std.Address)
            games: (slice[(&0xc00cdd6ae0.(*gno.land/r/demo/chess.Game) *gno.land/r/demo/chess.Game)] []*gno.land/r/demo/chess.Game)
            now: (struct{(13924100733147283456 uint64),(1695606752000000001 int64),(&0xc006d2e808.(*time.Location) *time.Location)} time.Time)
 (static) #1 Block(ID:0000000000000000000000000000000000000000:0,Addr:0xc008b2bc20,Source:func LobbyJoin(seconds (const-ty...,Parent:0xc0039f6b20)
            seconds: (0 int)
            increment: (0 int)
            tc: (undefined)
            caller: ( std.Address)
            games: (nil []*gno.land/r/demo/chess.Game)
            now: (nil time.Time)
	Frames:
          #6 [FRAME FUNC:NewBoard RECV:(undefined) (0 args) 26/11/9/10/8 LASTPKG:gno.land/r/demo/chess LASTRLM:Realm{Path:"gno.land/r/demo/chess",Time:218}#C00E762742CF910938141C9647849974EF56CE9D]
          #5 [FRAME FUNC:NewPosition RECV:(undefined) (0 args) 21/9/6/9/7 LASTPKG:gno.land/r/demo/chess LASTRLM:Realm{Path:"gno.land/r/demo/chess",Time:218}#C00E762742CF910938141C9647849974EF56CE9D]
          #4 [FRAME FUNC:newGame RECV:(undefined) (4 args) 13/4/0/8/6 LASTPKG:gno.land/r/demo/chess LASTRLM:Realm{Path:"gno.land/r/demo/chess",Time:218}#C00E762742CF910938141C9647849974EF56CE9D]
          #3 [FRAME FUNC:lobbyMatch RECV:(undefined) (3 args) 10/3/0/6/5 LASTPKG:gno.land/r/demo/chess LASTRLM:Realm{Path:"gno.land/r/demo/chess",Time:218}#C00E762742CF910938141C9647849974EF56CE9D]
          #2 [FRAME LABEL:  6/2/0/4/3]
          #1 [FRAME FUNC:refreshLobby RECV:(undefined) (1 args) 4/1/0/2/2 LASTPKG:gno.land/r/demo/chess LASTRLM:Realm{Path:"gno.land/r/demo/chess",Time:218}#C00E762742CF910938141C9647849974EF56CE9D]
          #0 [FRAME FUNC:LobbyJoin RECV:(undefined) (2 args) 1/0/0/0/1 LASTPKG:main LASTRLM:Realm(nil)]
	Realm:
	  gno.land/r/demo/chess
	Exceptions:
	  []
	  

Stack Trace:
    0  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/errors/errors.go:20
    1  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gno.land/pkg/sdk/vm/keeper.go:266
    2  /usr/lib/go/src/runtime/panic.go:884
    3  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gnovm/pkg/gnolang/store.go:252
    4  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gnovm/pkg/gnolang/values.go:2479
    5  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gnovm/pkg/gnolang/values.go:2292
    6  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gnovm/pkg/gnolang/values.go:2322
    7  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gnovm/pkg/gnolang/op_eval.go:39
    8  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gnovm/pkg/gnolang/machine.go:1272
    9  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gnovm/pkg/gnolang/machine.go:735
   10  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gno.land/pkg/sdk/vm/keeper.go:272
   11  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gno.land/pkg/sdk/vm/handler.go:64
   12  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/gno.land/pkg/sdk/vm/handler.go:29
   13  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/sdk/baseapp.go:644
   14  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/sdk/baseapp.go:823
   15  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/sdk/baseapp.go:580
   16  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/abci/client/local_client.go:82
   17  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/proxy/app_conn.go:73
   18  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/state/execution.go:253
   19  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/state/execution.go:102
   20  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/consensus/state.go:1347
   21  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/consensus/state.go:1275
   22  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/consensus/state.go:1221
   23  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/consensus/state.go:1252
   24  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/consensus/state.go:1637
   25  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/consensus/state.go:1483
   26  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/consensus/state.go:691
   27  /home/howl/go/pkg/mod/github.com/gnolang/gno@v0.0.0-20230922075615-67b75bafbe3c/tm2/pkg/bft/consensus/state.go:650
   28  /usr/lib/go/src/runtime/asm_amd64.s:1598
--= /Error =--
,events:[]'

Since the GnoVM state seems to point to the execution of NewBoard, it seems to me there's a problem resolving defaultBoard, which might get deleted at some point in previous executions of the realm?

I'm going to make a PR to make it create a new value of Board, instead of attempting to re-use Board.

@thehowl
Copy link
Member

thehowl commented Sep 25, 2023

testdir.tar.gz

culprit testdir

@thehowl
Copy link
Member

thehowl commented Sep 25, 2023

Found a way to consistently reproduce:

2023-09-25_08-43-40.mp4

Steps:

  1. Make P1 and P2 join the lobby. Start a new game.
  2. Play for a while. P1 resigns.
  3. Make P1 and P2 join the lobby, again.
  4. P2 gets the panic.

As I suspected, this is because we're reusing defaultBoard as a value.

PR fixing this incoming.

moul added a commit to moul/gno that referenced this issue Sep 25, 2023
Signed-off-by: moul <94029+moul@users.noreply.github.com>
thehowl added a commit to gnolang/gno that referenced this issue Jan 31, 2024
thehowl added a commit to gnolang/gno that referenced this issue Jan 31, 2024
Co-authored-by: Manfred Touron <94029+moul@users.noreply.github.com>
thehowl added a commit to gnolang/gno that referenced this issue Feb 1, 2024
From #1172, pushed to current codebase.

Co-authored-by: Manfred Touron <94029+moul@users.noreply.github.com>
leohhhn pushed a commit to leohhhn/gno that referenced this issue Feb 2, 2024
From gnolang#1172, pushed to current codebase.

Co-authored-by: Manfred Touron <94029+moul@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants