Re: [Widelands-public] Workarea preview segfault
Status: Beta
Brought to you by:
sirver
From: Erik <fr...@ho...> - 2006-04-24 17:06:54
|
Philipp Niemann wrote: >Hi, > >I rechecked without optimization. > >On Tue, Apr 18, 2006 at 06:45:59PM +0200, mes...@we... wrote: >[lots of snipping done] > > >>>Gesendet: 18.04.06 18:03:12 >>>Philipp Niemann wrote: >>> >>> >>> >>>>On Mon, Apr 10, 2006 at 11:06:33PM +0200, Holger Rapp wrote: >>>> >>>> >>>> >>>>>This is most probably introduced with the new overlay manager. Erik >>>>>could you check into that? >>>>> >>>>> >>>>> >>>>(gdb) backtrace >>>> >>>> >>>> >>>Strange backtrace. Why do the values of x, y and ydiff change from 346, >>>397 and 1 UIPanel::ui_mousemove to 159369400, 159369400 and 159369400 in >>>Map_View::handle_mousemove? This also happens to be the value of btns in >>>UIPanel::ui_mousemove and in jobid in Overlay_Manager::register_overlay. >>> >>> >>> >>I think it results from the reinterpret_cast within the Coords::ordering_functor. >> >>The problem was introduced February 26th. >> >>Changing the Coords::ordering_functor to >>if (a.x==b.x) return a.y < b.y; >>return a.x < b.x; >>works fine but is subject to optimization. >> >> > >There is a difference between compilation with build=release or >build=debug producing the crash and build=debug-slow. The reported crash >does not occur on my environment when I compile with debug-slow. > > I can not reproduce the problems some of you have. The tool size in the editor works fine, just like the road build overlays and workarea preview. I have tried all the different build types. I use Pentium Mobile with CC: (GNU) 3.4.5 (Gentoo 3.4.5-r1, ssp-3.4.5-1.0, pie-8.7.9). What are you using? The program is of course supposed to produce the same output no matter how it is optimized. I made a patch just to test if the problem is indeed related to the ordering functor. The patch is not intended for use, since it is much slower than the current code (on systems where it works). Try it with the build types you had problems with: --- widelands/src/geometry.h 2006-03-26 16:58:29.000000000 +0200 +++ widelands-other_ordering_functor/src/geometry.h 2006-04-24 18:24:39.000000000 +0200 @@ -108,8 +108,5 @@ struct ordering_functor { bool operator()(const Coords a, const Coords b) const { - return - *reinterpret_cast<const Uint32 * const>(&a) - < - *reinterpret_cast<const Uint32 * const>(&b); + return a.y < b.y or (a.y == b.y and a.x < b.x); } }; |