Skip to content

Build some skeletons in cgame, batch IPC#3146

Closed
VReaperV wants to merge 1 commit intofor-0.56.0/syncfrom
reaper/skeleton-batch/sync
Closed

Build some skeletons in cgame, batch IPC#3146
VReaperV wants to merge 1 commit intofor-0.56.0/syncfrom
reaper/skeleton-batch/sync

Conversation

@VReaperV
Copy link
Copy Markdown
Contributor

@VReaperV VReaperV commented Oct 23, 2024

Complementary pr to: DaemonEngine/Daemon#1386.

@VReaperV VReaperV force-pushed the reaper/skeleton-batch/sync branch from c7dcd50 to cb28004 Compare October 23, 2024 02:11
@slipher slipher changed the base branch from master to for-0.56.0/sync October 23, 2024 02:53
@illwieckz
Copy link
Copy Markdown
Member

illwieckz commented Oct 29, 2024

On my end the cgame crashes when built as a native exe or as a nexe, but not as a dll.

@illwieckz
Copy link
Copy Markdown
Member

illwieckz commented Oct 29, 2024

Program received signal SIGSEGV, Segmentation fault.
BuildSkeleton (clearOrigin=<optimized out>, frac=<optimized out>, endFrame=<optimized out>, 
    startFrame=<optimized out>, skelAnim=<optimized out>, skel=<optimized out>)
    at Unvanquished/daemon/src/shared/client/cg_api.cpp:575
575			return IQMBuildSkeleton( skel, skelAnim, startFrame, endFrame, frac );
(gdb) thread apply all backtrace

Thread 1 (Thread 3940852.3940852 "cgame-native-ex"):
#0  BuildSkeleton (clearOrigin=<optimized out>, frac=<optimized out>, endFrame=<optimized out>, startFrame=<optimized out>, skelAnim=<optimized out>, skel=<optimized out>) at Unvanquished/daemon/src/shared/client/cg_api.cpp:575
#1  trap_R_BuildSkeleton2 (skel=<optimized out>, anim=<optimized out>, startFrame=<optimized out>, endFrame=<optimized out>, frac=<optimized out>, clearOrigin=<optimized out>) at Unvanquished/daemon/src/shared/client/cg_api.cpp:722
#2  0x00005555555b5da8 in CG_BuildAnimSkeleton (lf=<optimized out>, newSkeleton=<optimized out>, oldSkeleton=<optimized out>, anim=<optimized out>) at Unvanquished/src/cgame/cg_animation.cpp:243
#3  0x00005555555c2bb9 in CG_BuildableAnimation (backLerp=<optimized out>, now=<optimized out>, old=<optimized out>, cent=<optimized out>) at Unvanquished/src/cgame/cg_buildable.cpp:1040
#4  CG_Buildable (cent=<optimized out>) at Unvanquished/src/cgame/cg_buildable.cpp:2133
#5  0x00005555555c3bcc in CG_AllBuildables (buildings=...) at Unvanquished/src/cgame/cg_buildable.cpp:2015
#6  0x00005555555cf125 in CG_AddPacketEntities () at Unvanquished/src/cgame/cg_ents.cpp:1342
#7  0x0000555555631775 in CG_DrawActiveFrame (serverTime=<optimized out>, demoPlayback=<optimized out>) at Unvanquished/src/cgame/cg_view.cpp:1973
#8  0x00005555555bb9b8 in operator() (demoPlayback=<optimized out>, serverTime=<optimized out>, __closure=<optimized out>) at Unvanquished/src/cgame/cg_api.cpp:88
#9  Util::apply_impl<VM::VMHandleSyscall(uint32_t, Util::Reader)::<lambda(int, bool)>, std::tuple<int&&, bool&&>, 0, 1> (func=..., tuple=...) at Unvanquished/daemon/src/common/Util.h:136
#10 Util::apply<VM::VMHandleSyscall(uint32_t, Util::Reader)::<lambda(int, bool)>, std::tuple<int&&, bool&&> > (tuple=..., func=...) at Unvanquished/daemon/src/common/Util.h:141
#11 IPC::detail::HandleMsg<VM::VMHandleSyscall(uint32_t, Util::Reader)::<lambda(int, bool)>, IPC::Message<IPC::Id<0, 3>, int, bool>, IPC::Reply<> > (func=..., channel=..., reader=...) at Unvanquished/daemon/src/common/IPC/Channel.h:217
#12 IPC::HandleMsg<IPC::SyncMessage<IPC::Message<IPC::Id<0, 3>, int, bool> >, VM::VMHandleSyscall(uint32_t, Util::Reader)::<lambda(int, bool)> > (func=..., channel=..., reader=...) at Unvanquished/daemon/src/common/IPC/Channel.h:241
#13 VM::VMHandleSyscall (id=<optimized out>, reader=...) at Unvanquished/src/cgame/cg_api.cpp:87
#14 0x00005555556ce124 in CommonInit (rootSocket=<optimized out>) at Unvanquished/daemon/src/shared/VMMain.cpp:72
#15 0x00005555555b06fc in main (argc=<optimized out>, argv=<optimized out>) at Unvanquished/daemon/src/shared/VMMain.cpp:183

To get exe cgame backtrace, I run the engine with -set vm.cgame.type 2 -set vm.cgame.debug on, then on another terminal I run gdb and type this every time a cgame is (re)started:

target extended-remote localhost:4014
continue

Note: On Linux to really kill everything after the crash I have to do killall -9 gdbserver, otherwise next start will try to forward commands to an existing instance, even if daemon has been killed since.

@illwieckz
Copy link
Copy Markdown
Member

More details:

Program received signal SIGSEGV, Segmentation fault.
0x000055555571c871 in IQMBuildSkeleton (skel=0x555555d074a0 <bSkeleton>, skelAnim=0x55555c9378a0, startFrame=0, 
    endFrame=0, frac=1)
    at Unvanquished/daemon/src/shared/client/cg_api.cpp:527
527		if ( anim->flags & IQM_LOOP ) {
(gdb) thread apply all backtrace

Thread 1 (Thread 3976463.3976463 "cgame-native-ex"):
#0  0x000055555571c871 in IQMBuildSkeleton (skel=0x555555d074a0 <bSkeleton>, skelAnim=0x55555c9378a0, startFrame=0, endFrame=0, frac=1) at Unvanquished/daemon/src/shared/client/cg_api.cpp:527
#1  0x000055555571cbe3 in BuildSkeleton (skel=0x555555d074a0 <bSkeleton>, skelAnim=0x55555c9378a0, startFrame=0, endFrame=0, frac=1, clearOrigin=false) at Unvanquished/daemon/src/shared/client/cg_api.cpp:575
#2  0x000055555571d57b in trap_R_BuildSkeleton2 (skel=0x555555d074a0 <bSkeleton>, anim=0x55555c9378a0, startFrame=0, endFrame=0, frac=1, clearOrigin=false) at Unvanquished/daemon/src/shared/client/cg_api.cpp:722
#3  0x000055555558c7a6 in CG_BuildAnimSkeleton (lf=0x555555d80170 <cg_entities+158000>, newSkeleton=0x555555d074a0 <bSkeleton>, oldSkeleton=0x555555d0a4e0 <oldbSkeleton>, anim=0x55555c9378a0) at Unvanquished/src/cgame/cg_animation.cpp:243
#4  0x00005555555a9bcf in CG_BuildableAnimation (cent=0x555555d7fa40 <cg_entities+156160>, old=0x7fffffff963c, now=0x7fffffff962c, backLerp=0x7fffffff9640) at Unvanquished/src/cgame/cg_buildable.cpp:1040
#5  0x00005555555ad38a in CG_Buildable (cent=0x555555d7fa40 <cg_entities+156160>) at Unvanquished/src/cgame/cg_buildable.cpp:2133
#6  0x00005555555acbac in CG_AllBuildables (buildings=...) at Unvanquished/src/cgame/cg_buildable.cpp:2015
#7  0x00005555555c2529 in CG_AddPacketEntities () at Unvanquished/src/cgame/cg_ents.cpp:1342
#8  0x0000555555668a02 in CG_DrawActiveFrame (serverTime=7231, demoPlayback=false) at Unvanquished/src/cgame/cg_view.cpp:1973
#9  0x0000555555595fcc in operator() (__closure=0x7fffffffea27, serverTime=7231, demoPlayback=false) at Unvanquished/src/cgame/cg_api.cpp:88
#10 0x0000555555599279 in Util::apply_impl<VM::VMHandleSyscall(uint32_t, Util::Reader)::<lambda(int, bool)>, std::tuple<int&&, bool&&>, 0, 1>(struct {...} &&, std::tuple<int&&, bool&&> &&, Util::seq<0, 1>) (func=..., tuple=...) at Unvanquished/daemon/src/common/Util.h:136
#11 0x0000555555598d46 in Util::apply<VM::VMHandleSyscall(uint32_t, Util::Reader)::<lambda(int, bool)>, std::tuple<int&&, bool&&> >(struct {...} &&, std::tuple<int&&, bool&&> &&) (func=..., tuple=...) at Unvanquished/daemon/src/common/Util.h:141
#12 0x0000555555597e07 in IPC::detail::HandleMsg<VM::VMHandleSyscall(uint32_t, Util::Reader)::<lambda(int, bool)>, IPC::Message<IPC::Id<0, 3>, int, bool>, IPC::Reply<> >(IPC::Channel &, IPC::SyncMessage<IPC::Message<IPC::Id<0, 3>, int, bool>, IPC::Reply<> >, Util::Reader, struct {...} &&) (channel=..., reader=..., func=...) at Unvanquished/daemon/src/common/IPC/Channel.h:217
#13 0x0000555555596d9b in IPC::HandleMsg<IPC::SyncMessage<IPC::Message<IPC::Id<0, 3>, int, bool> >, VM::VMHandleSyscall(uint32_t, Util::Reader)::<lambda(int, bool)> >(IPC::Channel &, Util::Reader, struct {...} &&) (channel=..., reader=...--Type <RET> for more, q to quit, c to continue without paging--
, func=...) at Unvanquished/daemon/src/common/IPC/Channel.h:241
#14 0x0000555555596396 in VM::VMHandleSyscall (id=3, reader=...) at Unvanquished/src/cgame/cg_api.cpp:87
#15 0x0000555555787e73 in CommonInit (rootSocket=63) at Unvanquished/daemon/src/shared/VMMain.cpp:72
#16 0x0000555555788264 in main (argc=2, argv=0x7fffffffed28) at Unvanquished/daemon/src/shared/VMMain.cpp:183

@VReaperV
Copy link
Copy Markdown
Contributor Author

Hmm, maybe anim was invalid somehow. I had only tested with dll. Either way though, this pr will likely be closed in favour of moving all the skeleton stuff to engine.

@VReaperV VReaperV closed this Jan 12, 2026
@VReaperV VReaperV deleted the reaper/skeleton-batch/sync branch January 12, 2026 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants