Jump to content

  •  

Bug Tracker Migration

June 3rd
Good news everyone! The staff has decided that it is time to slowly kill off this Bug Tracker. We will begin the process of slowly migrating from this Bug Tracker over to our Github Issues which can be found here: https://github.com/HerculesWS/Hercules/issues

Over the next couple of days, I will be closing off any opportunity to create new reports. However, I still will keep the opportunity to reply to existing Bug Reports. Doing this will allow us to slowly fix any bug reports we have listed here so that we can easily migrate over to our Issue Tracker.

Update - June 7th 2015: Creating new bug posts has been disabled. Please use our https://github.com/HerculesWS/Hercules/issues tracker to post bugs. Users are still able to reply to existing bug posts.

- Administration

Issue Information

  • #007517

  • 0 - None Assigned

  • Fixed

Issue Confirmations

  • Yes (1)No (0)
Photo

Yet another map server crash.

Posted by jTynne on 13 July 2013 - 06:09 AM

#0  linkdb_erase (head=0x7fffffffd7f8, key=0x7fffefea6f3c) at db.c:2778
        node = 0x4400004d3e
        __FUNCTION__ = "linkdb_erase"
#1  0x00000000004d2acd in npc_unload_ev_label (key=<value optimized out>,
    data=<value optimized out>, ap=0x7fffffffd820) at npc.c:1776
        label_linkdb = 0x7fffeede73f4
        nd = <value optimized out>
#2  0x00000000005e458a in db_obj_vforeach (self=0x1d918d8,
    func=0x4d2a90 <npc_unload_ev_label>, args=0x7fffffffd880) at db.c:1937
        argscopy = {{gp_offset = 24, fp_offset = 48,
            overflow_arg_area = 0x7fffffffd960,
            reg_save_area = 0x7fffffffd8a0}}
        db = 0x1d918d8
        sum = 0
        node = 0x1e5c0d8
        parent = <value optimized out>
#3  0x00000000005e3341 in db_obj_foreach (self=<value optimized out>,
    func=<value optimized out>) at db.c:1983
        args = {{gp_offset = 16, fp_offset = 48,
            overflow_arg_area = 0x7fffffffd960,
            reg_save_area = 0x7fffffffd8a0}}
#4  0x00000000004d293b in npc_unload (nd=0x7fffefea6f3c, single=1 '\001')
    at npc.c:1836
        iter = <value optimized out>
        bl = <value optimized out>
        __FUNCTION__ = "npc_unload"
#5  0x000000000058be3d in atcommand_unloadnpc (fd=37,
    sd=<value optimized out>, command=<value optimized out>,
    message=<value optimized out>, info=<value optimized out>)
    at atcommand.c:4352
        nd = 0x7fffefea6f3c
        NPCname = "restbind", '\000' <repeats 16 times>
#6  0x000000000057842d in is_atcommand (fd=37, sd=0x4db3f60,
    message=<value optimized out>, type=<value optimized out>)
    at atcommand.c:10063
        charname = "\000\337\377\377\377\177\000\000\006\000\000\000\000\000\000\000\024\000\000\000\000\000\000"
        params = "restbind", '\000' <repeats 91 times>
        charname2 = "\000\000\000\000\000\000\000\000\275\224H\000\000\000\000\000p*\206\005\000\000\000"
        params2 = ".\000\000\000\000\000\000\000\000\350G\000\000\000\000\000\060\000\000\000\060\000\000\000\310\335\377\377\377\177\000\000\260\334\377\377\377\177", '\000' <repeats 34 times>"\253, \203\020\f\000\000\000\000\000\335\377\377\377\177\000\000p*\206\005\000\000\000\000\234\b\000"
        command = "@unloadnpc", '\000' <repeats 89 times>
        output = "]\001\000\000\000\000\000\000\071\"_\000\000\000\000\000\060\
#6  0x000000000057842d in is_atcommand (fd=37, sd=0x4db3f60,
    message=<value optimized out>, type=<value optimized out>)
    at atcommand.c:10063
        charname = "\000\337\377\377\377\177\000\000\006\000\000\000\000\000\000\000\024\000\000\000\000\000\000"
        params = "restbind", '\000' <repeats 91 times>
        charname2 = "\000\000\000\000\000\000\000\000\275\224H\000\000\000\000\000p*\206\005\000\000\000"
        params2 = ".\000\000\000\000\000\000\000\000\350G\000\000\000\000\000\060\000\000\000\060\000\000\000\310\335\377\377\377\177\000\000\260\334\377\377\377\177", '\000' <repeats 34 times>"\253, \203\020\f\000\000\000\000\000\335\377\377\377\177\000\000p*\206\005\000\000\000\000\234\b\000"
        command = "@unloadnpc", '\000' <repeats 89 times>
        output = "]\001\000\000\000\000\000\000\071\"_\000\000\000\000\000\060\---Type <return> to continue, or q <return> to quit---
000\000\000\060\000\000\000\251\351^\000\000\000\000\000@\333\377\377\377\177\000\000/uN\000\000\000\000\000\000\000[\000\001[[[\000\000\000\000\000\000\000\000|\333\377\377\377\177\000\000Tu\177\361\377\177\000\000\253\203\020\f\000\000\000\000\261\023R\000\000\000\000\000td\315\355\377\177\000\000VJY", '\000' <repeats 13 times>, "\033uL\000\000\000\000\000td\315\355\377\177\000\000zt\365\367\377\177\000\000\000\000\000\000\000\000\000\000td\315\355\377\177\000\000td\315\355\377\177\000\000x\335\377\377\377\177\000\000\031\000\000\000\000\000\000\000C\332]\000\000\000\000\000,L/\357\377\177\000\000,L/\357\377\177\000\000\027\000\000\000\000\000\000\000h\334]\000\000\000\000\000,L/\357\377\177\000\000\063\341]\000\000\000\000\000,L/\357\377\177\000\000"...
        atcmd_msg = "@unloadnpc restbind\000\000\000\000\000zt\365\367\377\177\000\000(\000\000\000\000\000\000\000l\256M\000\000\000\000\000<\033\356\356\377\177\000\000!\001\000\000\000\000\000\000!\000\371\000\003\000\000\000\375\377\377\377\000\000#\001\001\000\000\000\000\000\000\000\002\000\000\000 \001\000\000!\001\000\000\t\001\000\000\n\001\000\000\v\001\000\000\f\001\000\000\r\001\000\000\016\001\000\000\017\001\000\000\020\001\000\000\377\177\000\000\025", '\000' <repeats 15 times>, "\005\000\000\000\000\000\000\000\025\000\000\000\000\000\000\000\000\335\377\377\377\177\000\000!\000\000\000\000\000\000\000\200k\330\001\000\000\000\000\025\000\000\000\000\000\000\000\365\350G\000\000\000\000\000\000\350G\000\000\000\000\000\000\000\000\000\374\000\000\000\373\000\000\000V"...
        ssd = <value optimized out>
        info = 0x7ffff4b1842c
#7  0x0000000000487998 in clif_parse_GlobalMessage (fd=37, sd=0x4db3f60)
    at clif.c:9928
        text = 0x7fffef509488 "jTynne : @unloadnpc restbind"
        textlen = 29
        name = 0x7fffef509488 "jTynne : @unloadnpc restbind"
        message = 0x7fffef509491 "@unloadnpc restbind"
        fakename = 0x0
        namelen = 6
        messagelen = <value optimized out>
        is_fake = <value optimized out>
        __FUNCTION__ = "clif_parse_GlobalMessage"
#8  0x0000000000466bf9 in clif_parse (fd=37) at clif.c:17728
        cmd = <value optimized out>
        packet_len = 33
        sd = 0x4db3f60
        pnum = <value optimized out>
#9  0x00000000005df876 in do_sockets (next=<value optimized out>)
    at socket.c:864
        rfd = {__fds_bits = {137438953472, 0 <repeats 15 times>}}
        timeout = {tv_sec = 0, tv_usec = 35797}
        ret = <value optimized out>
        i = <value optimized out>
#10 0x00000000005dd6e6 in main (argc=1, argv=<value optimized out>)
    at core.c:348
        next = <value optimized out>


Happened while attempting to unload this NPC:

-	script	restbind	-1,{
OnInit:
	unbindatcmd "rest";
	bindatcmd("rest","restbind::OnAtcommand",0,90);
	end;
	
OnAtcommand:
set @msg$,.@atcmd_parameters$[0];
if(@msg$ == "") { dispbottom "[Resting] : To rest, type @rest <your message here>. You will be logged out and your rest bonus timer will begin. When you log back in next, you will gain bonus experience each time you defeat a monster."; dispbottom "To refill your rest bonus timer, simply rest regularly each night when you sign out!"; 
end;
}
else {
if(RestDayNum < 1) { set RestDayNum,gettime(8); set RestCount,RestCount+1; set RestTimer, gettimetick(0);}
if(gettime(8) != RestDayNum) { set RestCount,RestCount+1; set RestDayNum,gettime(8);}
set RestTimer, gettimetick(0);
atcommand "@afk [Resting] : "+@msg$;
set #set_resting,1;
end;
}
}

I think the unloadnpc command in general is causing this. I tried to unload a basic npc, and my server crashed too.

Thanks for the confirmation, mofo. Running latest Herc?

it happens only on linux os. before i'm having an issue regarding on this. just like killing on npc. when you right click on then kill. then character select or logout the map server will crashed. i'm not sure if its already fix now. but on windows os. there are no problem on unloading npc.

This is related to recent https://github.com/H...f397bc592dcc1ad

It's an issue with @unloadnpc command.

I'm fixing it.

yes, jTynne, I'm on the latest herc.

Should be fixed after this is merged: https://github.com/H...ercules/pull/58

Issue was caused by dangling pointer left after:
- unloading single NPC with unique label
- unloading single NPC with non-unique label which happens to be loaded last of all NPC with same label

Subsequent unloading of any NPC is bound to cause server crash.

Gepard's merge fixes it; Waiting for someone to merge it into Herc for everyone else. :3

Thank you Gepard!

changed status to: Fixed

Merged

Thank you very much Gepard :3