Issue information

Issue ID
#719
Status
Fixed
Severity
None
Started
Hercules Elf Bot
Dec 30, 2007 9:43
Last Post
Hercules Elf Bot
Dec 30, 2007 9:43
Confirmation
N/A

Hercules Elf Bot - Dec 30, 2007 9:43

Originally posted by [b]Ai4rei[/b]
http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=719

Alle 3 Servers are crashing on start with following output:

LoginServer:
CODE
[Status]: The login-server is ready (Server is listening on the port xxxxx).

[Fatal Error]: Memory manager::memmgr_malloc() serious error (allocating 28+1638
4 bytes at ..\src\common\socket.c:524)
[Info]: ** Memory Manager Information **
Blocks: 0032 , BlockSize: 081960 Byte , Used: 00002561KB
    Block #0000 : size: 00064 byte. used: 0027/0975 prev:NULL next:NULL
    Block #0001 : size: 02048 byte. used: 0003/0039 prev:NULL next:NULL
    Block #0002 : size: 16384 byte. used: 0003/0004 prev:NULL next:NULL
    Block #0003 : size: 07168 byte. used: 0001/0011 prev:NULL next:NULL
    Block #0004 : size: 01024 byte. used: 0002/0078 prev:NULL next:NULL
    Block #0005 : size: 00128 byte. used: 0001/0553 prev:NULL next:NULL
    Block #0006 : size: 01280 byte. used: 0001/0063 prev:NULL next:NULL
    Block #0007 : size: 01088 byte. used: 0001/0073 prev:NULL next:NULL
    Block #0008 : size: 00192 byte. used: 0001/0386 prev:NULL next:NULL
    Block #0009 : unused.
    Block #0010 : unused.
    Block #0011 : unused.
    Block #0012 : unused.
    Block #0013 : unused.
    Block #0014 : unused.
    Block #0015 : unused.
    Block #0016 : unused.
    Block #0017 : unused.
    Block #0018 : unused.
    Block #0019 : unused.
    Block #0020 : unused.
    Block #0021 : unused.
    Block #0022 : unused.
    Block #0023 : unused.
    Block #0024 : unused.
    Block #0025 : unused.
    Block #0026 : unused.
    Block #0027 : unused.
    Block #0028 : unused.
    Block #0029 : unused.
    Block #0030 : unused.
    Block #0031 : unused.

CharServer:
CODE
[Info]: Attempt to connect to login-server...
[Status]: Connecting to x.x.x.x:xxxxx
[Fatal Error]: Memory manager::memmgr_malloc() serious error (allocating 28+1638
4 bytes at ..\src\common\socket.c:524)
[Info]: ** Memory Manager Information **
Blocks: 0032 , BlockSize: 081960 Byte , Used: 00002561KB
    Block #0000 : size: 00064 byte. used: 0035/0975 prev:NULL next:NULL
    Block #0001 : size: 02048 byte. used: 0003/0039 prev:NULL next:NULL
    Block #0002 : size: 16384 byte. used: 0003/0004 prev:NULL next:NULL
    Block #0003 : size: 07168 byte. used: 0001/0011 prev:NULL next:NULL
    Block #0004 : size: 01024 byte. used: 0002/0078 prev:NULL next:NULL
    Block #0005 : size: 00128 byte. used: 0001/0553 prev:NULL next:NULL
    Block #0006 : size: 01088 byte. used: 0001/0073 prev:NULL next:NULL
    Block #0007 : size: 01280 byte. used: 0005/0063 prev:NULL next:NULL
    Block #0008 : size: 24064 byte. used: 0002/0003 prev:NULL next:NULL
    Block #0009 : size: 01664 byte. used: 0001/0048 prev:NULL next:NULL
    Block #0010 : size: 00192 byte. used: 0001/0386 prev:NULL next:NULL
    Block #0011 : size: 27712 byte. used: 0001/0002 prev:NULL next:NULL
    Block #0012 : unused.
    Block #0013 : unused.
    Block #0014 : unused.
    Block #0015 : unused.
    Block #0016 : unused.
    Block #0017 : unused.
    Block #0018 : unused.
    Block #0019 : unused.
    Block #0020 : unused.
    Block #0021 : unused.
    Block #0022 : unused.
    Block #0023 : unused.
    Block #0024 : unused.
    Block #0025 : unused.
    Block #0026 : unused.
    Block #0027 : unused.
    Block #0028 : unused.
    Block #0029 : unused.
    Block #0030 : unused.
    Block #0031 : unused.

MapServer:
CODE
[Notice]: Server running in 'Debug Mode'.
[Fatal Error]: Memory manager::memmgr_malloc() serious error (allocating 28+23 b
ytes at ..\src\map\atcommand.c:150)
[Info]: ** Memory Manager Information **
Blocks: 0032 , BlockSize: 081960 Byte , Used: 00002561KB
    Block #0000 : size: 00064 byte. used: 0503/0975 prev:NULL next:NULL
    Block #3452816845 : size: 02048 byte. used: 0001/0039 prev:NULL next:NULL
    Block #0002 : size: 16384 byte. used: 0001/0004 prev:NULL next:NULL
    Block #0003 : size: 07168 byte. used: 0001/0011 prev:NULL next:NULL
    Block #0004 : size: 01024 byte. used: 0001/0078 prev:NULL next:NULL
    Block #0005 : size: 00128 byte. used: 0001/0553 prev:NULL next:NULL
    Block #0006 : unused.
    Block #0007 : unused.
    Block #0008 : unused.
    Block #0009 : unused.
    Block #0010 : unused.
    Block #0011 : unused.
    Block #0012 : unused.
    Block #0013 : unused.
    Block #0014 : unused.
    Block #0015 : unused.
    Block #0016 : unused.
    Block #0017 : unused.
    Block #0018 : unused.
    Block #0019 : unused.
    Block #0020 : unused.
    Block #0021 : unused.
    Block #0022 : unused.
    Block #0023 : unused.
    Block #0024 : unused.
    Block #0025 : unused.
    Block #0026 : unused.
    Block #0027 : unused.
    Block #0028 : unused.
    Block #0029 : unused.
    Block #0030 : unused.
    Block #0031 : unused.


/common/socket.c:
CODE
static int create_session(int fd, RecvFunc func_recv, SendFunc func_send, ParseFunc func_parse)
{
    CREATE(session[fd], struct socket_data, 1);
    CREATE(session[fd]->rdata, unsigned char, RFIFO_SIZE);
    CREATE(session[fd]->wdata, unsigned char, WFIFO_SIZE); // <-- Line 524
    session[fd]->max_rdata  = RFIFO_SIZE;
    session[fd]->max_wdata  = WFIFO_SIZE;
    session[fd]->func_recv  = func_recv;
    session[fd]->func_send  = func_send;
    session[fd]->func_parse = func_parse;
    session[fd]->rdata_tick = last_tick;
    return 0;
}

/map/atcommand.c:
CODE
int msg_config_read(const char* cfgName)
{
    int msg_number;
    char line[1024], w1[1024], w2[1024];
    FILE *fp;
    static int called = 1;

    if ((fp = fopen(cfgName, "r")) == NULL) {
        ShowError("Messages file not found: %s\n", cfgName);
        return 1;
    }

    if ((--called) == 0)
        memset(msg_table, 0, sizeof(msg_table[0]) * MAX_MSG);

    while(fgets(line, sizeof(line), fp))
    {
        if (line[0] == '/' && line[1] == '/')
            continue;
        if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
            continue;

        if (strcmpi(w1, "import") == 0)
            msg_config_read(w2);
        else
        {
            msg_number = atoi(w1);
            if (msg_number >= 0 && msg_number < MAX_MSG)
            {
                if (msg_table[msg_number] != NULL)
                    aFree(msg_table[msg_number]);
                msg_table[msg_number] = (char *)aMalloc((strlen(w2) + 1)*sizeof (char));  // <-- Line 150
                strcpy(msg_table[msg_number],w2);
            }
        }
    }

    fclose(fp);

    return 0;
}