Welcome to the Builder Academy

Question Possible bug in latest tbamud release?

More
15 Jan 2013 10:34 #1297 by Juras
I haven't really gotten a chance to test it much, as it was already 3 am when it first happened.

running autorun on tbamud on ubuntu linux

player idled out
zmud reconnected automatically
they kept timing out at login screen.

I attempted to create a mortal test character.

put in name, got the 'is this name correct' prompt
type Y and bam it's dead.

I'm about to go to bed now (finally), but i let my test mortal idle out and reconnect, and while I had a connection sitting idle at the login prompt, i was able to crash the mud every time i attempted to create a new character. existing character logins were not affected, only the creation of new ones. it seems to only happen if someone that was idle rented is sitting at the prompt.

I really havent changed much code wise yet, so I'm afraid that whatever is causing this is in the stock code. Tomorrow when I get up, i'll do some more testing, with stock as well as with my modified to see what the problem is.

Gonna need some help though, i havent ran anything through a debugger or done much coding at all in over 5 years.

Please Log in or Create an account to join the conversation.

More
15 Jan 2013 18:09 #1348 by zusuk
I can't replicate the bug.. either I'm not understanding your explanation of it, or its something you modified to cause, or my changes to my codebase resolved the code.

I'll try again later on a stock copy of tba..

Website
www.luminariMUD.com

Main Game Port
luminariMUD.com:4100

Please Log in or Create an account to join the conversation.

More
15 Jan 2013 18:17 #1349 by zusuk
Here you go, it DOES crash stock TBA but not my MUD for whatever reason.
Code:
luminari@luminarimud.com [~/tbamud]# gdb bin/circle lib/core.tmp.14049 GNU gdb (GDB) CentOS (7.0.1-42.el5.centos.1) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /home/luminari/tbamud/bin/circle...done. [New Thread 14049] Reading symbols from /lib/libcrypt.so.1...(no debugging symbols found)...done. Loaded symbols for /lib/libcrypt.so.1 Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done. Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done. Loaded symbols for /lib/ld-linux.so.2 Reading symbols from /lib/libnss_files.so.2...(no debugging symbols found)...done. Loaded symbols for /lib/libnss_files.so.2 Reading symbols from /lib/libnss_dns.so.2...(no debugging symbols found)...done. Loaded symbols for /lib/libnss_dns.so.2 Reading symbols from /lib/libresolv.so.2...(no debugging symbols found)...done. Loaded symbols for /lib/libresolv.so.2 Core was generated by `bin/circle -q 4102'. Program terminated with signal 11, Segmentation fault. #0 0x080e653a in perform_new_char_dupe_check (d=0xae3b528, arg=0xbfa946e4 "y") at interpreter.c:1186 1186 if (!strcmp(GET_NAME(k->character), GET_NAME(d->character))) { (gdb) list 1181 1182 if (k == d) 1183 continue; 1184 1185 /* Do the player names match? */ 1186 if (!strcmp(GET_NAME(k->character), GET_NAME(d->character))) { 1187 /* Check the other character is still in creation? */ 1188 if ((STATE(k) > CON_PLAYING) && (STATE(k) < CON_QCLASS)) { 1189 /* Boot the older one */ 1190 k->character->desc = NULL; (gdb) info local k = 0xae37e80 (gdb) up #1 nanny (d=0xae3b528, arg=0xbfa946e4 "y") at interpreter.c:1451 1451 perform_new_char_dupe_check(d); (gdb) list 1446 write_to_output(d, "Sorry, new players can't be created at the moment.\r\n"); 1447 mudlog(NRM, LVL_GOD, TRUE, "Request for new char %s denied from [%s] (wizlock)", GET_PC_NAME(d->character), d->host); 1448 STATE(d) = CON_CLOSE; 1449 return; 1450 } 1451 perform_new_char_dupe_check(d); 1452 write_to_output(d, "New character.\r\nGive me a password for %s: ", GET_PC_NAME(d->character)); 1453 echo_off(d); 1454 STATE(d) = CON_NEWPASSWD; 1455 } else if (*arg == 'n' || *arg == 'N') { (gdb) info local load_result = <value optimized out> player_i = <value optimized out> olc_functions = {{state = 18, func = 0x810e710 <oedit_parse>}, {state = 20, func = 0x81460d0 <zedit_parse>}, {state = 22, func = 0x8133720 <sedit_parse>}, {state = 21, func = 0x80ee570 <medit_parse>}, {state = 19, func = 0x8131390 <redit_parse>}, { state = 24, func = 0x8092ca0 <cedit_parse>}, {state = 26, func = 0x80b14a0 <trigedit_parse>}, {state = 25, func = 0x808ae90 <aedit_parse>}, {state = 27, func = 0x80d6420 <hedit_parse>}, {state = 28, func = 0x812b8b0 <qedit_parse>}, { state = 29, func = 0x81241e0 <prefedit_parse>}, {state = 30, func = 0x80e2230 <ibtedit_parse>}, {state = 31, func = 0x80f2ac0 <msgedit_parse>}, {state = -1, func = 0}} (gdb) up #2 0x0809bee0 in game_loop (local_mother_desc=3) at comm.c:883 883 nanny(d, comm); (gdb) list 878 if (d->showstr_count) /* Reading something w/ pager */ 879 show_string(d, comm); 880 else if (d->str) /* Writing boards, mail, etc. */ 881 string_add(d, comm); 882 else if (STATE(d) != CON_PLAYING) /* In menus, etc. */ 883 nanny(d, comm); 884 else { /* else: we're playing normally. */ 885 if (aliased) /* To prevent recursive aliases. */ 886 d->has_prompt = TRUE; /* To get newline before next cmd output. */ 887 else if (perform_alias(d, comm, sizeof(comm))) /* Run it through aliasing system */ (gdb) info local input_set = {__fds_bits = {512, 0 <repeats 31 times>}} output_set = {__fds_bits = {1008, 0 <repeats 31 times>}} exc_set = {__fds_bits = {0 <repeats 32 times>}} null_set = {__fds_bits = {0 <repeats 32 times>}} last_time = {tv_sec = 1358273696, tv_usec = 990806} opt_time = {tv_sec = 0, tv_usec = 100000} process_time = {tv_sec = 0, tv_usec = 746} temp_time = {tv_sec = 0, tv_usec = 99254} before_sleep = {tv_sec = 1358273696, tv_usec = 891552} now = {tv_sec = 1358273696, tv_usec = 991539} timeout = {tv_sec = 0, tv_usec = 0} comm = "y\000stcharthree\000\211\000\000\020\002\000\310G\251\277a\272\211\000\000\020\002\000\030$\220\000P\222\365\ta\272\211\000\000\020\000\000d\241\230\000d\241\230\001\260\332\217\000\364\217\230\000 \000\000\000\263G\251\277a\272\211\000\364\217\230\000p\241\230\000\360\377\331\n@\241\230\000\f\000\000\000@\241\230\000\000\000\000\000a\272\211\000\000\000\000\000 \000\000\000\343G\251\277a\272\211\000p\241\230\000p\241\230\000M\333\217\000a\272\211\000\f\000\000\000@\241\230", '\000' <repeats 13 times>, " \000\000\000\023H\251\277a\272\211\000p\241\230\000 \000\000\000#H\251\277p\245\230\000\f\000\000\000p\241\230\000\000\000\000\000@\241\230\000\f\000\000\000@\241\230", '\000' <repeats 21 times>, "\020\000\000\000p\241\230\000\004\000\000\000\002", '\000' <repeats 19 times>"\260, \000\000\000p\241\230\000\004\000\000\000\002\000\000\000\000\000\000\000\370-\025\n\300n\341\n\002\000\000\000\000\000\000\000\320\303\341\n\205\305\201\000\320"... d = <value optimized out> next_d = <value optimized out> missed_pulses = <value optimized out> maxdesc = <value optimized out> aliased = 0 (gdb) up #3 0x0809d037 in init_game (argc=Cannot access memory at address 0x0 ) at comm.c:533 533 game_loop(mother_desc); (gdb) list 528 if (fCopyOver) /* reload players */ 529 copyover_recover(); 530 531 log("Entering game loop."); 532 533 game_loop(mother_desc); 534 535 Crash_save_all(); 536 537 log("Closing all sockets."); (gdb) info local No locals. (gdb) up #4 main (argc=Cannot access memory at address 0x0 ) at comm.c:353 353 init_game(port); (gdb) list 348 349 if (scheck) 350 boot_world(); 351 else { 352 log("Running game on port %d.", port); 353 init_game(port); 354 } 355 356 log("Clearing game world."); 357 destroy_db(); (gdb) info local pos = <value optimized out> dir = 0x9f53068 "lib" (gdb) up Initial frame selected; you cannot go up. (gdb) list 358 359 if (!scheck) { 360 log("Clearing other memory."); 361 free_bufpool(); /* comm.c */ 362 free_player_index(); /* players.c */ 363 free_messages(); /* fight.c */ 364 free_text_files(); /* db.c */ 365 board_clear_all(); /* boards.c */ 366 free(cmd_sort_info); /* act.informative.c */ 367 free_command_list(); /* act.informative.c */ (gdb) info local pos = <value optimized out> dir = 0x9f53068 "lib" (gdb) up Initial frame selected; you cannot go up.

Website
www.luminariMUD.com

Main Game Port
luminariMUD.com:4100

Please Log in or Create an account to join the conversation.

More
16 Jan 2013 00:41 #1351 by Vatiken
Good catch guys, this one has been around since 2010.

This should correct the issue:
Code:
if (k == d) continue; + if (k->character == NULL) + continue; + /* Do the player names match? */ if (!strcmp(GET_NAME(k->character), GET_NAME(d->character))) { /* Check the other character is still in creation? */

tbaMUD developer/programmer
The following user(s) said Thank You: Juras

Please Log in or Create an account to join the conversation.

More
16 Jan 2013 08:18 #1354 by zusuk
haha that's hilarious! it turns out i musta ran into that bug and fixed it, i already have that check

sorry i didn't report it at the time, maybe i thought it was something i created and didn't want to bug ya'allz :P

Website
www.luminariMUD.com

Main Game Port
luminariMUD.com:4100

Please Log in or Create an account to join the conversation.

More
16 Jan 2013 21:08 #1358 by Liko

Vatiken wrote: Good catch guys, this one has been around since 2010.

This should correct the issue:

Code:
if (k == d) continue; + if (k->character == NULL) + continue; + /* Do the player names match? */ if (!strcmp(GET_NAME(k->character), GET_NAME(d->character))) { /* Check the other character is still in creation? */


Might want to tell people this goes in interpreter.c

Randian(0.0.0)
Owner/Developer

Please Log in or Create an account to join the conversation.

Time to create page: 0.223 seconds