Forums
libODE and GIMPACT vs OPCODE (car jumps around? look here) - Printable Version

+- Forums (https://www.vdrift.net/Forum)
+-- Forum: Project (https://www.vdrift.net/Forum/forumdisplay.php?fid=4)
+--- Forum: Development (https://www.vdrift.net/Forum/forumdisplay.php?fid=9)
+--- Thread: libODE and GIMPACT vs OPCODE (car jumps around? look here) (/showthread.php?tid=782)

Pages: 1 2


- xTs - 09-18-2007

ok, i used gdb and then valgrind, but i couldn't figure out where the bug is.

It might be in gim_copy_buffers (gim_memory.cpp:864), but i cant find out what could be wrong there.

Or somewhere in gim_alloc... who knows...


Output of valgrind:
Code:
==24257== Invalid write of size 1
==24257==    at 0x4C23833: memcpy (mc_replace_strmem.c:406)
==24257==    by 0x58F162D: gim_copy_buffers(GBUFFER_ID*, unsigned, GBUFFER_ID*, unsigned, unsigned) (gim_memory.cpp:864)
==24257==    by 0x58F3A86: gim_trimesh_create_from_arrays(GIM_TRIMESH*, GBUFFER_ARRAY*, GBUFFER_ARRAY*, char) (gim_trimesh.cpp:56)
==24257==    by 0x58F3C1E: gim_trimesh_create_from_data(GIM_TRIMESH*, float (*) [3], unsigned, char, unsigned*, unsigned, char, char) (gim_trimesh.cpp:118)
==24257==    by 0x58E3EC1: dxTriMesh::dxTriMesh(dxSpace*, dxTriMeshData*) (collision_trimesh_gimpact.cpp:316)
==24257==    by 0x58E422B: dCreateTriMesh (collision_trimesh_gimpact.cpp:371)
==24257==    by 0x4C7A56: PHYSICSOBJECT::InitTrimesh(void const*, int, int, void const*, int, int, void const*, PHYSICSOBJECTSETTINGS const&) (physics.cpp:73)
==24257==    by 0x44A1C8: OBJECTNODE::RegisterWithCollisionSystem() (objects.cpp:405)
==24257==    by 0x44B15F: OBJECTS::Add(VERTEX, float, std::string, std::string, bool, bool, bool, bool, bool, bool, JOEPACK*, float, float, float, float, float, float, SCENENODE*) (objects.cpp:144)
==24257==    by 0x44BE03: OBJECTS::LoadObjectsFromFolder(std::string) (objects.cpp:300)
==24257==    by 0x41EB4F: GAME::LoadWorld() (game.cpp:515)
==24257==    by 0x529273: VGUI::Gui::ProcessAction(std::string) (gui.cpp:994)
==24257==  Address 0x98BD904 is 4 bytes before a block of size 588 alloc'd
==24257==    at 0x4C21C16: malloc (vg_replace_malloc.c:149)
==24257==    by 0x58F14D8: gim_alloc(unsigned long) (gim_memory.cpp:124)
==24257==    by 0x58F2157: _system_buffer_alloc_function(unsigned, int) (gim_memory.cpp:258)
==24257==    by 0x58F1E0C: gim_create_buffer(unsigned, unsigned, int, GBUFFER_ID*) (gim_memory.cpp:502)
==24257==    by 0x58F1EC3: gim_buffer_array_copy_value(GBUFFER_ARRAY*, GBUFFER_ARRAY*, unsigned, int) (gim_memory.cpp:927)
==24257==    by 0x58F3A86: gim_trimesh_create_from_arrays(GIM_TRIMESH*, GBUFFER_ARRAY*, GBUFFER_ARRAY*, char) (gim_trimesh.cpp:56)
==24257==    by 0x58F3C1E: gim_trimesh_create_from_data(GIM_TRIMESH*, float (*) [3], unsigned, char, unsigned*, unsigned, char, char) (gim_trimesh.cpp:118)
==24257==    by 0x58E3EC1: dxTriMesh::dxTriMesh(dxSpace*, dxTriMeshData*) (collision_trimesh_gimpact.cpp:316)
==24257==    by 0x58E422B: dCreateTriMesh (collision_trimesh_gimpact.cpp:371)
==24257==    by 0x4C7A9D: PHYSICSOBJECT::InitTrimesh(void const*, int, int, void const*, int, int, void const*, PHYSICSOBJECTSETTINGS const&) (physics.cpp:75)
==24257==    by 0x4CEA97: BEZIERNODE::RegisterCollisionData() (track.cpp:406)
==24257==    by 0x4D0538: ROADSTRIP::GenerateCollisionData() (track.cpp:353)
--24257-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
--24257-- si_code=1;  Faulting address: 0x400BE2646A;  sp: 0x4032AAD60

valgrind: the 'impossible' happened:
   Killed by fatal signal
==24257==    at 0x380209E9: vgPlain_arena_malloc (m_mallocfree.c:190)
==24257==    by 0x38035847: vgPlain_cli_malloc (replacemalloc_core.c:101)
==24257==    by 0x38002305: vgMemCheck_malloc (mc_malloc_wrappers.c:182)
==24257==    by 0x38035ED7: do_client_request (scheduler.c:1158)
==24257==    by 0x380375C2: vgPlain_scheduler (scheduler.c:869)
==24257==    by 0x38052F1E: run_a_thread_NORETURN (syswrap-linux.c:87)

sched status:
  running_tid=1

Thread 1: status = VgTs_Runnable
==24257==    at 0x4C21C16: malloc (vg_replace_malloc.c:149)
==24257==    by 0x58F14D8: gim_alloc(unsigned long) (gim_memory.cpp:124)
==24257==    by 0x58F2157: _system_buffer_alloc_function(unsigned, int) (gim_memory.cpp:258)
==24257==    by 0x58F1E0C: gim_create_buffer(unsigned, unsigned, int, GBUFFER_ID*) (gim_memory.cpp:502)
==24257==    by 0x58F1EC3: gim_buffer_array_copy_value(GBUFFER_ARRAY*, GBUFFER_ARRAY*, unsigned, int) (gim_memory.cpp:927)
==24257==    by 0x58F3A86: gim_trimesh_create_from_arrays(GIM_TRIMESH*, GBUFFER_ARRAY*, GBUFFER_ARRAY*, char) (gim_trimesh.cpp:56)
==24257==    by 0x58F3C1E: gim_trimesh_create_from_data(GIM_TRIMESH*, float (*) [3], unsigned, char, unsigned*, unsigned, char, char) (gim_trimesh.cpp:118)
==24257==    by 0x58E3EC1: dxTriMesh::dxTriMesh(dxSpace*, dxTriMeshData*) (collision_trimesh_gimpact.cpp:316)
==24257==    by 0x58E422B: dCreateTriMesh (collision_trimesh_gimpact.cpp:371)
==24257==    by 0x4C7A56: PHYSICSOBJECT::InitTrimesh(void const*, int, int, void const*, int, int, void const*, PHYSICSOBJECTSETTINGS const&) (physics.cpp:73)
==24257==    by 0x44A1C8: OBJECTNODE::RegisterWithCollisionSystem() (objects.cpp:405)
==24257==    by 0x44B15F: OBJECTS::Add(VERTEX, float, std::string, std::string, bool, bool, bool, bool, bool, bool, JOEPACK*, float, float, float, float, float, float, SCENENODE*) (objects.cpp:144)
==24257==    by 0x44BE03: OBJECTS::LoadObjectsFromFolder(std::string) (objects.cpp:300)
==24257==    by 0x41EB4F: GAME::LoadWorld() (game.cpp:515)
==24257==    by 0x529273: VGUI::Gui::ProcessAction(std::string) (gui.cpp:994)
==24257==    by 0x52BBE8: VGUI::Gui::MouseRelease() (gui.cpp:329)
==24257==    by 0x42218F: GAME::Start(std::list<std::string, std::allocator<std> >&) (game.cpp:1619)
==24257==    by 0x40A0A0: main (main.cpp:26)

Thread 2: status = VgTs_Runnable
==24257==    at 0x65775D7: ioctl (in /lib/libc-2.6.1.so)
==24257==    by 0x685FB31: (within /usr/lib/libasound.so.2.0.0)
==24257==    by 0x688451C: (within /usr/lib/libasound.so.2.0.0)
==24257==    by 0x688545C: (within /usr/lib/libasound.so.2.0.0)
==24257==    by 0x686E939: (within /usr/lib/libasound.so.2.0.0)
==24257==    by 0x685A1F6: snd_pcm_write_areas (in /usr/lib/libasound.so.2.0.0)
==24257==    by 0x68630D1: snd_pcm_mmap_writei (in /usr/lib/libasound.so.2.0.0)
==24257==    by 0x4E5918B: (within /usr/lib/libSDL-1.2.so.0.11.0)
==24257==    by 0x4E2EBA3: (within /usr/lib/libSDL-1.2.so.0.11.0)
==24257==    by 0x4E368E6: (within /usr/lib/libSDL-1.2.so.0.11.0)
==24257==    by 0x4E79A48: (within /usr/lib/libSDL-1.2.so.0.11.0)
==24257==    by 0x74C8316: start_thread (in /lib/libpthread-2.6.1.so)
==24257==    by 0x657EC6C: clone (in /lib/libc-2.6.1.so)



- abs1nth - 10-12-2007

btw. ODE 0.9 is out


- alex25 - 10-12-2007

abs1nth Wrote:btw. ODE 0.9 is out

but it doesn't work for me on my i386 laptop with gimpact. i had to stay with r1222.

--alex--


- xTs - 10-12-2007

the problem here is the old version of GIMPACT ode ships.


(and i still think we shoud switch completly to bullet. Joe knows why Wink


- alex25 - 10-12-2007

xTs Wrote:(and i still think we shoud switch completly to bullet. Joe knows why Wink

what is bullet?

--alex--


- alex25 - 10-12-2007

alex25 Wrote:\what is bullet?

i think i found it at http://www.continuousphysics.com/Bullet/. is that it?

--alex--


- xTs - 10-12-2007

Yes, and it supports more than one core... means: more performance for those with multicore cpus.

(I think its clever to use such a lib, because the number of cores will increase further in the near future)

But its Joes choice.


- cotharyus - 10-12-2007

Personally, I'm all for it. I've been running nothing but multi-core (or multi-CPU) systems since about '96. Currently, it might help things out on my mac book, and it would certainly help things out on my current desktop (Athlon 64x2) and my next desktop (at least a 4 core mac pro). Multi-core development is the way of the future.