Complete.Org: Mailing Lists: Archives: freeciv-dev: December 2001:
[Freeciv-Dev] Re: Client core (PR#1107)
Home

[Freeciv-Dev] Re: Client core (PR#1107)

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: jdorje@xxxxxxxxxxxxxxxxxxxxx
Cc: freeciv-dev@xxxxxxxxxxx, bugs@xxxxxxxxxxxxxxxxxxx
Subject: [Freeciv-Dev] Re: Client core (PR#1107)
From: Raimar Falke <hawk@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 13 Dec 2001 16:53:14 +0100
Reply-to: rf13@xxxxxxxxxxxxxxxxxxxxxx

On Sat, Dec 08, 2001 at 07:20:40PM -0800, jdorje@xxxxxxxxxxxxxxxxxxxxx wrote:
> Paul Zastoupil wrote:
> 
> > I was trying to hit 't' on s city.
> > 
> > civclient: map.c:1217: map_get_city: Assertion 
> > `is_normal_map_pos(((x)),((y)))' failed.
> > 
> > #0  0x403278d1 in __kill () from /lib/libc.so.6
> > #1  0x4032764d in raise (sig=6) at ../sysdeps/posix/raise.c:27
> > #2  0x40328cb8 in abort () at ../sysdeps/generic/abort.c:88
> > #3  0x40320d71 in __assert_fail (assertion=0x80c3900 
> > "is_normal_map_pos(((x)),((y)))", 
> >     file=0x80c4564 "map.c", line=1217, function=0x80c475b "map_get_city") 
> > at assert.c:74
> > #4  0x080a8521 in map_get_city (x=-1, y=30) at map.c:1217
> > #5  0x0808c7a5 in find_city_near_tile (x=0, y=32) at mapctrl.c:361
> > #6  0x0808cab0 in key_city_workers (widget=0x81a24a0, ev=0x8198688) at 
> > mapctrl.c:461
> > #7  0x08085a92 in keyboard_handler (widget=0x81a24a0, event=0x8198688) at 
> > gui_main.c:303
> > #8  0x400db841 in gtk_marshal_BOOL__POINTER (object=0x81a24a0, 
> >     func=0x808545c <keyboard_handler>, func_data=0x0, args=0xbffff610) at 
> > gtkmarshal.c:28
> > #9  0x4010b0be in gtk_handlers_run (handlers=0x81fd078, signal=0xbffff5b0, 
> >     object=0x81a24a0, params=0xbffff610, after=0) at gtksignal.c:1917
> > #10 0x4010a51f in gtk_signal_real_emit (object=0x81a24a0, signal_id=26, 
> >     params=0xbffff610) at gtksignal.c:1477
> > #11 0x40108594 in gtk_signal_emit (object=0x81a24a0, signal_id=26) at 
> > gtksignal.c:552
> > #12 0x4013f874 in gtk_widget_event (widget=0x81a24a0, event=0x8198688)
> >     at gtkwidget.c:2864
> > #13 0x400db73c in gtk_propagate_event (widget=0x81f99b8, event=0x8198688)
> >     at gtkmain.c:1360
> > #14 0x400da975 in gtk_main_do_event (event=0x8198688) at gtkmain.c:818
> > #15 0x4018e10f in gdk_event_dispatch (source_data=0x0, 
> > current_time=0xbffff9e0, 
> >     user_data=0x0) at gdkevents.c:2139
> > #16 0x401bd055 in g_main_dispatch (dispatch_time=0xbffff9e0) at gmain.c:656
> > #17 0x401bd659 in g_main_iterate (block=1, dispatch=1) at gmain.c:877
> > #18 0x401bd7e8 in g_main_run (loop=0x8213b00) at gmain.c:935
> > #19 0x400da27b in gtk_main () at gtkmain.c:524
> > #20 0x0808728e in ui_main (argc=3, argv=0xbffffb24) at gui_main.c:836
> > #21 0x0805f178 in main (argc=3, argv=0xbffffb24) at civclient.c:189
> > #22 0x40315306 in __libc_start_main (main=0x805ed20 <main>, argc=3, 
> > ubp_av=0xbffffb24, 
> >     init=0x805c680 <_init>, fini=0x80b9580 <_fini>, rtld_fini=0x4000d2cc 
> > <_dl_fini>, 
> >     stack_end=0xbffffb1c) at ../sysdeps/generic/libc-start.c:129
> 
> When you click on a tile like that, the game tries to associate a city 
> with it, so it calls find_city_near_tile.  Unfortunately, 
> find_city_near_tile is not CHECK_MAP_POS-safe, so it'll fail the 
> assertion any time a wrap-around is needed to find the city (i.e. any 
> time you're working near x==0 or x==map.xsize-1).
> 
> This is easy enough to fix.  But, it's more complicated because each of 
> gui-gtk, gui-xaw, and gui-mui uses its own local (static) version of the 
> function; this code is not common.  However, nothing in the code is 
> gui-specific, and in fact all three versions of the code are completely 
> identical.  (I'm not sure what gui-win32 does for this...maybe it's not 
> implemented yet.)
> 

> I therefore propose that this code be unified into find_city_near_tile() 
> in mapctrl_common.[ch] in client/.  A patch for this will follow.

Can you provide such a patch?

        Raimar

-- 
 email: rf13@xxxxxxxxxxxxxxxxx
 checking for the vaidity of the Maxwell laws on this machine... ok
 checking if e=mc^2... ok
 checking if we can safely swap on /dev/fd0... yes
    -- kvirc 2.0.0's configure 


[Prev in Thread] Current Thread [Next in Thread]