URL: <http://gna.org/bugs/?20490>
Summary: Player owner reconnecting to player while delegate user attached => server assertion failures, crash Project: Freeciv Submitted by: jtn Submitted on: Sat Feb 9 21:39:12 2013 Category: None Severity: 3 - Normal Priority: 5 - Normal Status: None Assigned to: None Originator Email: Open/Closed: Open Release: S2_4 r22316 Discussion Lock: Any Operating System: GNU/Linux Planned Release: 2.4.0,2.5.0 _______________________________________________________ Details: * Two users initially: herp, derp, each with a player * Game started * herp: /delegate to pamcakes * herp leaves * pamcakes joins (not attached to player intitially) * pamcakes: /delegate take Ur-Nammu [herp's player] * bad things happen to server "Bad things" include many many assertion failures and eventually a crash. With -F, the first server assertion failure: 0: in dbv_isset() [bitvector.c::120]: assertion 'pdbv->vec != ((void *)0)' failed. #0 0x00007f76e90c07bb in raise (sig=<value optimised out>) at ../nptl/sysdeps/unix/sysv/linux/pt-raise.c:42 No locals. #1 0x00000000005e5f8c in fc_assert_fail (file=0x68436d "bitvector.c", function=0x6844be "dbv_isset", line=120, assertion=<value optimised out>, message=0x680e85 "nologmsg:%s") at log.c:520 level = LOG_FATAL #2 0x00000000005fc8d5 in dbv_isset (pdbv=<value optimised out>, bit=<value optimised out>) at bitvector.c:120 __FUNCTION__ = "dbv_isset" #3 0x000000000048c931 in map_is_known_and_seen (ptile=0x5126, pplayer=0x5126, vlayer=6) at maphand.c:749 No locals. #4 0x000000000048cb97 in send_tile_info (dest=<value optimised out>, ptile=0x354f2d0, send_unknown=false) at maphand.c:422 pplayer = 0x1f9ede0 pconn_iter = <value optimised out> pconn = 0x8c1970 info = {tile = 0, continent = 0, known = 6107115, owner = 0, worked = 0, terrain = 0, resource = 33156576, special = {false, false, false, false, 80, 236, false, true, false, false, false}, bases = {vec = "\000\375MI"}, spec_sprite = '\000' <repeats 13 times>, "\n\025]\000\000\000\000\000P\354\370\001\000\000\000\000\bOI", '\000' <repeats 15 times>, label = '\000' <repeats 14 times>"\205, &o\213|\213\206\220\205u\001", '\000' <repeats 12 times>, "p\031\214\000\000\000\000\000\320\363\025"} owner = <value optimised out> __FUNCTION__ = "send_tile_info" #5 0x000000000048d193 in send_all_known_tiles (dest=0x1750580) at maphand.c:364 tiles_sent = <value optimised out> #6 0x000000000043b673 in send_all_info (dest=0x1750580) at srv_main.c:555 __FUNCTION__ = "send_all_info" #7 0x00000000004816a9 in connection_attach_real (pconn=0x8c1970, pplayer=0x1f9ede0, observing=false, connecting=false) at connecthand.c:622 __FUNCTION__ = "connection_attach_real" #8 0x000000000048198a in connection_delegate_restore (pconn=0x8c1970) at connecthand.c:822 pplayer = <value optimised out> __FUNCTION__ = "connection_delegate_restore" #9 0x0000000000481e77 in establish_new_connection (pconn=0x8c20a0) at connecthand.c:189 pdelegate = <value optimised out> dest = 0x17505d0 pplayer = <value optimised out> packet = {you_can_join = true, message = "herp Welcome\000\000\000\000\000\000\000\004\000\000\000L\315]\351v\177\000\000\340/h\000\000\000\000\000x\365\025\066\377\177\000\000\200\365\025\066\377\177\000\000\210\365\025\066\377\177\000\000p\365\025\066\377\177\000\000\320\365\025\066\377\177\000\000\345\334a\000\000\000\000\000\000\020\000\000\000\000\000\000G\030\251\000\000\000\000\000\063\347\326\347v\177\000\000\331\017\000\000\000\000\000\000\200\247\a\350v\177\000\000&\000\000\000\000\000\000\000\000@]\351v\177\000\000\000\000\000\000\000\000\000\000\205\375\326\347v\177\000\000 \030\251\000\000\000\000\000 \030\251\000\000\000\000\000&\000\000\000\000\000\000\000\200\247\a\350v\177\000\000\000\000\000\000\000\000\000\000\236\343\326\347v\177\000\000\060\060\060\060\060\060\060\060\200\247\a\350v\177\000\000 \030\251\000\000\000\000\000&", '\000' <repeats 15 times>, "@\022"..., capability = "+Freeciv-2.4-network rules_finished trademindist_size\000\000(\211\322\347v\177\000\000en_GB.UT\000\205&o\213|\213\206\004\000\000\000\000\000\000\000o\374\025\066\377\177\000\000\002\000\000\000\000\000\000\000\240\374\025\066\377\177\000\000\300\031\214\000\000\000\000\000\350\355\371\001\000\000\000\000\340\355\371\001\000\000\000\000u\362C\000\000\000\000\000\060\000\000\000\060\000\000\000\200\374\025\066\377\177\000\000\300\373\025\066\377\177\000\000\000\205&o\000\000\000\000@\370t\001\000\000\000\000ěE\000\005\000\000\000\070\374\025\066\377\177\000\000 \373\025\066\377\177\000\000\300\031\214\000\000\000\000\000\350\355\371\001\000\000\000\000@\370t\001\000\000\000\000@\276\a\350v\177\000\000\001\000\000\000\000\000\000\000"..., challenge_file = "challenge_5556_4\000\000\000\000\000\000\000\310JC\000\000\000\000\000 \000\000\000\060\000\000\000\020\376\025\066\377\177\000\000P\375\025\066\377\177", '\000' <repeats 26 times>"\300, \031\214\000\000\000\000\000@\025\026\066\377\177\000\000take Ur-\271\vH", '\000' <repeats 13 times>, "r^_\000\000\000\000\000\220\006\026\066\377\177\000\000\260\vH", '\000' <repeats 13 times>, "p\031\214", '\000' <repeats 13 times>"\220, \004\026\066\377\177\000\000\220\006\026\066\377\177\000\000\000\205&o\213|\213\206\220\002\026\066\377\177\000\000p\031\214", '\000' <repeats 13 times>"\220, \004\026\066\377\177\000\000\220\006\026\066\377\177\000\000\000\000\000\000\000\000\000\000\220\002\026\066\377\177\000\000V\251D\000\000\000\000\000\214\376\025\066\377\177", '\000' <repeats 26 times>..., conn_id = 4} connect_info = { message = '\000' <repeats 55 times>, "0", '\000' <repeats 32 times>"\300, \r\026\066\377\177\000\000@\022\026\066\377\177\000\000\260\016\026\066\377\177\000\000\001\000\000\000\000\000\000\000P\017\026\066\377\177\000\000\377\001\000\000\000\000\000\000\231\rh\000\000\000\000\000@\022\026\066\377\177\000\000p\242\337\347v\177\000\000\001\200\255\373\000\000\000\000@\022\026\066\377\177\000\000@\022\026\066\377\177\000\000@\022\026\066\377\177\000\000@\022\026\066\377\177\000\000p\022\026\066\377\177\000\000?\024\026\066\377\177\000\000@\022\026\066\377\177\000\000?\024\026\066\377\177", '\000' <repeats 46 times>, "\004", '\000' <repeats 35 times>"\240, \016\026\066\377\177\000\000@\020\026\066\377\177\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\240\024\026\066\377\177\000\000\377\377\377\377\000\000\000\000\310"..., tile = 907416560, event = 32767, conn_id = 24442032} hostname = "teacup\000\000\000\024\026\066\377\177\000\000 \363t\001\000\000\000\000\265\221\322\347v\177", '\000' <repeats 26 times>, "8\025\026\066\377\177\000\000 \363t\001\000\000\000\000\001\000\000\000\000\000\000\000\220\374t\001", '\000' <repeats 68 times>, "8\025\026\066\377\177\000\000\310\005c\000\000\000\000\000 \363t\001\000\000\000\000\006\000\000\000\000\000\000\000\240\372t\001\000\000\000\000p\025\026\066\377\177\000\000]\215\322\347v\177\000\000C\000_GB.UTF-8\000v\177\000\000\000\000\000\000\000\000\000\000\200\211\322\347v\177\000\000LC_MESSAGES/freeciv.mo\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\205&o\213|\213\206en_GB.UT\300\024\026\066\377\177\000\000\240"... __FUNCTION__ = "establish_new_connection" #10 0x0000000000482b59 in handle_login_request (pconn=0x8c20a0, req=0x1fa4d10) at connecthand.c:416 msg = '\000' <repeats 377 times>"\205, &o\213|\213\206\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\000\304\031\026\066\377\177\000\000\001\000\000\000\000\000\000\000p\031\214\000\000\000\000\000(7\026\066\377\177\000\000L7\026\066\377\177\000\000\353\221H\000\000\000\000\000\t\000\000\000civ1", '\000' <repeats 60 times>, "civ2", '\000' <repeats 49 times>"\205, &o\213|\213\206\000\000\000\000civ2\000\000\000\000\000\000\000\000p\031\214\000\000\000\000\000p\030\026\066\377\177\000\000p\030\026\066\377\177\000\000\000\000\000\000\000\000\000\000\260\030\026\066\377\177\000\000\261\031[\000\000\000\000\000p\031\214", '\000' <repeats 13 times>"\260, \003u\001\000\000\000\000\274\rH\000\000\000\000\000\200\030\026\066\377\177\000\000\260\031\026\066\377\177\000\000"... kick_time_remaining = <value optimised out> __FUNCTION__ = "handle_login_request" #11 0x000000000043aaa5 in server_packet_input (pconn=0x8c20a0, packet=0x5126, type=6) at srv_main.c:1531 pplayer = <value optimised out> __FUNCTION__ = "server_packet_input" #12 0x00000000004c64aa in incoming_client_packets () at sernet.c:457 command_ok = <value optimised out> packet = {data = 0x1fa4d10, type = PACKET_SERVER_JOIN_REQ} #13 server_sniff_all_input () at sernet.c:834 pconn = 0x8c20a0 nb = <value optimised out> i = <value optimised out> s = <value optimised out> max_desc = <value optimised out> readfs = {fds_bits = {256, 0 <repeats 15 times>}} writefs = {fds_bits = {0 <repeats 16 times>}} exceptfs = {fds_bits = {0 <repeats 16 times>}} tv = {tv_sec = 0, tv_usec = 999996} __FUNCTION__ = "server_sniff_all_input" #14 0x000000000043c8ad in srv_running () at srv_main.c:2304 eot_timer = 0x3727e50 save_counter = 1 i = 0 is_new_turn = <value optimised out> need_send_pending_events = false __FUNCTION__ = "srv_running" #15 0x000000000043d632 in srv_main () at srv_main.c:2764 __FUNCTION__ = "srv_main" #16 0x0000000000433f9f in main (argc=<value optimised out>, argv=0x7fff36163e68) at civserver.c:453 inx = 4 showhelp = false showvers = false option = 0x0 __FUNCTION__ = "main" Without -F, I get 8112 of these assertions, then a different one, then a segfault. in dbv_isset() [bitvector.c::120]: assertion 'pdbv->vec != ((void *)0)' failed. ... in map_get_player_tile() [maphand.c::1093]: assertion 'pplayer->server.private_map' failed. Program terminated with signal 11, Segmentation fault. #0 0x000000000048b9f9 in map_get_player_site (ptile=<value optimised out>, pplayer=<value optimised out>) at maphand.c:1082 No locals. #1 0x000000000047664f in send_all_known_cities (dest=0x19b2580) at citytools.c:1846 ptile = <value optimised out> ptile_index = 0 pplayer = 0x2201820 pconn_iter = 0x0 pconn = 0x8c1970 __FUNCTION__ = "send_all_known_cities" #2 0x000000000043b67b in send_all_info (dest=0x19b2580) at srv_main.c:556 __FUNCTION__ = "send_all_info" #3 0x00000000004816a9 in connection_attach_real (pconn=0x8c1970, pplayer=0x2201820, observing=false, connecting=false) at connecthand.c:622 __FUNCTION__ = "connection_attach_real" #4 0x000000000048198a in connection_delegate_restore (pconn=0x8c1970) at connecthand.c:822 pplayer = <value optimised out> __FUNCTION__ = "connection_delegate_restore" #5 0x0000000000481e77 in establish_new_connection (pconn=0x8c20a0) at connecthand.c:189 pdelegate = <value optimised out> dest = 0x19b25d0 pplayer = <value optimised out> packet = {you_can_join = true, message = "herp Welcome\000\000\000\030\352N\245\004\000\000\000L\315Q.\301\177\000\000\340/h\000\000\000\000\000\030\351N\245\377\177\000\000 \351N\245\377\177\000\000(\351N\245\377\177\000\000\020\351N\245\377\177\000\000p\351N\245\377\177\000\000\345\334a\000\000\000\000\000\000\020\000\000\000\000\000\000G\030\251\000\000\000\000\000\063\347\312,\301\177\000\000\331\017\000\000\000\000\000\000\200\247\373,\301\177\000\000&\000\000\000\000\000\000\000\000@Q.\301\177\000\000\000\000\000\000\000\000\000\000\205\375\312,\301\177\000\000 \030\251\000\000\000\000\000 \030\251\000\000\000\000\000&\000\000\000\000\000\000\000\200\247\373,\301\177\000\000\000\000\000\000\000\000\000\000\236\343\312,\301\177\000\000\000\352N\245\377\177\000\000\200\247\373,\301\177\000\000 \030\251\000\000\000\000\000&", '\000' <repeats 15 times>"\340, \005O\245\377\177\000\000\002\000\000\000\000\000\000\000\274"..., capability = "+Freeciv-2.4-network rules_finished trademindist_size\000\000(\211\306,\301\177\000\000en_GB.UT\000S\211\036\006x\206\214\004\000\000\000\000\000\000\000\017\360N\245\377\177\000\000\002\000\000\000\000\000\000\000@\360N\245\377\177\000\000\300\031\214\000\000\000\000\000(\030 \002\000\000\000\000 \030 \002\000\000\000\000u\362C\000\000\000\000\000\060\000\000\000\060\000\000\000 \360N\245\377\177\000\000`\357N\245\377\177\000\000\000S\211\036\000\000\000\000@\030\233\001\000\000\000\000ěE\000\005\000\000\000\330\357N\245\377\177\000\000\300\356N\245\377\177\000\000\300\031\214\000\000\000\000\000(\030 \002\000\000\000\000@\030\233\001\000\000\000\000@\276\373,\301\177\000\000"..., challenge_file = "challenge_5556_4\000\000\000\000\000\000\000\310JC\000\000\000\000\000 \000\000\000\060\000\000\000\260\361N\245\377\177\000\000\360\360N\245\377\177", '\000' <repeats 26 times>"\300, \031\214\000\000\000\000\000\340\bO\245\377\177\000\000 Michael\271\vH", '\000' <repeats 13 times>, "r^_\000\000\000\000\000\060\372N\245\377\177\000\000\260\vH", '\000' <repeats 13 times>, "p\031\214", '\000' <repeats 13 times>, "0\370N\245\377\177\000\000\060\372N\245\377\177\000\000\000S\211\036\006x\206\214\060\366N\245\377\177\000\000p\031\214", '\000' <repeats 13 times>, "0\370N\245\377\177\000\000\060\372N\245\377\177\000\000\000\000\000\000\000\000\000\000\060\366N\245\377\177\000\000V\251D\000\000\000\000\000,\362N\245\377\177", '\000' <repeats 26 times>"\352, \bO\245\377\177"..., conn_id = 4} connect_info = { message = '\000' <repeats 55 times>, "0", '\000' <repeats 32 times>, "`\001O\245\377\177\000\000\340\005O\245\377\177\000\000P\002O\245\377\177\000\000\001\000\000\000\000\000\000\000\360\002O\245\377\177\000\000\377\001\000\000\000\000\000\000\231\rh\000\000\000\000\000\340\005O\245\377\177\000\000p\242\323,\301\177\000\000\001\200\255\373\000\000\000\000\340\005O\245\377\177\000\000\340\005O\245\377\177\000\000\340\005O\245\377\177\000\000\340\005O\245\377\177\000\000\020\006O\245\377\177\000\000\337\aO\245\377\177\000\000\340\005O\245\377\177\000\000\337\aO\245\377\177", '\000' <repeats 46 times>, "\004", '\000' <repeats 35 times>, "@\002O\245\377\177\000\000\340\003O\245\377\177\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000@\bO\245\377\177\000\000\377\377\377\377\000\000\000\000\310\005c\000\000\000\000\000\340\003O\245\377\177\000\000\300\217\373,\301\177\000\000\000\000\000\000\000\000\000\000\340"..., tile = -1521547376, event = 32767, conn_id = 26940592} hostname = "teacup\000\000\240\aO\245\377\177\000\000 \023\233\001\000\000\000\000\265\221\306,\301\177", '\000' <repeats 26 times>"\330, \bO\245\377\177\000\000 \023\233\001\000\000\000\000\001\000\000\000\000\000\000\000\220\034\233\001", '\000' <repeats 68 times>"\330, \bO\245\377\177\000\000\310\005c\000\000\000\000\000 \023\233\001\000\000\000\000\006\000\000\000\000\000\000\000\240\032\233\001\000\000\000\000\020\tO\245\377\177\000\000]\215\306,\301\177\000\000C\000_GB.UTF-8\000\301\177\000\000\000\000\000\000\000\000\000\000\200\211\306,\301\177\000\000LC_MESSAGES/freeciv.mo\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000S\211\036\006x\206\214en_GB.UT`\bO\245\377\177\000\000\240 \214\000\000\000\000\000"... __FUNCTION__ = "establish_new_connection" #6 0x0000000000482b59 in handle_login_request (pconn=0x8c20a0, req=0x2207750) at connecthand.c:416 msg = '\000' <repeats 377 times>, "S\211\036\006x\206\214\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\000d\rO\245\377\177\000\000\001\000\000\000\000\000\000\000p\031\214\000\000\000\000\000\310*O\245\377\177\000\000\354*O\245\377\177\000\000\353\221H\000\000\000\000\000\t\000\000\000civ1", '\000' <repeats 60 times>, "civ2", '\000' <repeats 49 times>, "S\211\036\006x\206\214\000\000\000\000civ2\000\000\000\000\000\000\000\000p\031\214\000\000\000\000\000\020\fO\245\377\177\000\000\020\fO\245\377\177\000\000\000\000\000\000\000\000\000\000P\fO\245\377\177\000\000\261\031[\000\000\000\000\000p\031\214", '\000' <repeats 13 times>"\260, #\233\001\000\000\000\000\274\rH\000\000\000\000\000 \fO\245\377\177\000\000P\rO\245\377\177\000\000\003\000\000\000"... kick_time_remaining = <value optimised out> __FUNCTION__ = "handle_login_request" #7 0x000000000043aaa5 in server_packet_input (pconn=0x8c20a0, packet=0x0, type=53184736) at srv_main.c:1531 pplayer = <value optimised out> __FUNCTION__ = "server_packet_input" #8 0x00000000004c64aa in incoming_client_packets () at sernet.c:457 command_ok = <value optimised out> packet = {data = 0x2207750, type = PACKET_SERVER_JOIN_REQ} #9 server_sniff_all_input () at sernet.c:834 pconn = 0x8c20a0 nb = <value optimised out> i = <value optimised out> s = <value optimised out> max_desc = <value optimised out> readfs = {fds_bits = {256, 0 <repeats 15 times>}} writefs = {fds_bits = {0 <repeats 16 times>}} exceptfs = {fds_bits = {0 <repeats 16 times>}} tv = {tv_sec = 0, tv_usec = 999996} __FUNCTION__ = "server_sniff_all_input" #10 0x000000000043c8ad in srv_running () at srv_main.c:2304 eot_timer = 0x39497d0 save_counter = 1 i = 0 is_new_turn = <value optimised out> need_send_pending_events = false __FUNCTION__ = "srv_running" #11 0x000000000043d632 in srv_main () at srv_main.c:2764 __FUNCTION__ = "srv_main" #12 0x0000000000433f9f in main (argc=<value optimised out>, argv=0x7fffa54f3208) at civserver.c:453 inx = 5 showhelp = false showvers = false option = 0x0 __FUNCTION__ = "main" (I note that this is a map of 78 x 52 = 4056 tiles, so it looks like there are two assertion failures per tile. I haven't checked if they have different backtraces.) A similar thing happens if the delegate 'pamcakes' just leaves the game, without 'herp' reconnecting. So it may be something to do with the process of detaching the delegate from the player. This is probably the simpler case to debug, but I haven't double-checked the backtraces etc are exactly the same. _______________________________________________________ Reply to this item at: <http://gna.org/bugs/?20490> _______________________________________________ Message sent via/by Gna! http://gna.org/ _______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev