这是GDB捕获到的另外一个错误
提示 *** glibc detected *** ./NetCenter_Service: double free or corruption (!prev): 0x08cb88d8 ***
然后死掉#0  0xb77b6424 in __kernel_vsyscall ()
#1  0xb75301df in raise () from /lib/i386-linux-gnu/libc.so.6
#2  0xb7533825 in abort () from /lib/i386-linux-gnu/libc.so.6
#3  0xb756d39a in ?? () from /lib/i386-linux-gnu/libc.so.6
#4  0xb7577ee2 in ?? () from /lib/i386-linux-gnu/libc.so.6
#5  0xb70058cd in my_free () from /usr/lib/i386-linux-gnu/libmysqlclient.so.18
#6  0xb6ff9e16 in vio_delete () from /usr/lib/i386-linux-gnu/libmysqlclient.so.18
#7  0xb6fe4bd7 in end_server () from /usr/lib/i386-linux-gnu/libmysqlclient.so.18
#8  0xb6fe7f28 in cli_advanced_command () from /usr/lib/i386-linux-gnu/libmysqlclient.so.18
#9  0xb6fdc53d in mysql_ping () from /usr/lib/i386-linux-gnu/libmysqlclient.so.18
#10 0xb74635bd in CDataBase_MySQL::DataBase_MySQL_Execute (this=0xb7481300 <m_MySQL>, xhNet=6249, 
    lpszSQLQuery=0xb32f88bc "INSERT INTO `data_netflow_2013-04-19` (`host_ip`,`host_mac`,`up_flow`,`down_flow`,`http_up`,`http_down`,`http_total`,`smtp_up`,`smtp_down`,`smtp_total`,`pop3_up`,`pop3_down`,`pop3_total`,`ftp_up`,`ftp"...) at ./DataBase_MySql/DataBase_MySql.cpp:141
#11 0xb7465c6a in DataBase_MySQL_Execute (xhData=6249, 
    lpszSQLQuery=0xb32f88bc "INSERT INTO `data_netflow_2013-04-19` (`host_ip`,`host_mac`,`up_flow`,`down_flow`,`http_up`,`http_down`,`http_total`,`smtp_up`,`smtp_down`,`smtp_total`,`pop3_up`,`pop3_down`,`pop3_total`,`ftp_up`,`ftp"...) at ./DataBase_DllMain.cpp:45
#12 0xb7757651 in CLogicWork_Flow::LogicWork_Flow_InsertStorage (this=0xb775f030 <m_LogicFlow>, pSt_XMLFLow=0xb32f912c) at ./Logic_ProWorkFlow/Logic_ProWorkFlow.cpp:55
#13 0xb775afd5 in LogicWork_Flow_InsertStorage (pSt_XMLFLow=0xb32f912c) at ./ProWork_DllMain.cpp:63
#14 0xb774a2b0 in CDetachLayer_Dispatch::DetachLayer_Dispatch_Flow (this=0xb7752048 <m_Dispatch>, 
    lpszPacket=0xb0100472 "<netflow><host_ip>123.151.47.33</host_ip><host_mac>001C54096111</host_mac><up_flow>302</up_flow><down_flow>0</down_flow><proto><up><ftp>0</ftp><telnet>0</telnet><smtp>0</smtp><http>0</http><pop3>0</po"..., nLen=397) at ./DetachLayer_Dispatch/DetachLayer_Dispatch.cpp:187
#15 0xb774a037 in CDetachLayer_Dispatch::DetachLayer_Dispatch_Analyze (this=0xb7752048 <m_Dispatch>, pSt_ProtocolHdr=0xb0100468, 
    lpszPacket=0xb0100472 "<netflow><host_ip>123.151.47.33</host_ip><host_mac>001C54096111</host_mac><up_flow>302</up_flow><down_flow>0</down_flow><proto><up><ftp>0</ftp><telnet>0</telnet><smtp>0</smtp><http>0</http><pop3>0</po"..., ptszBuffer=0x0, pInt_Len=0xb0100c94) at ./DetachLayer_Dispatch/DetachLayer_Dispatch.cpp:74
#16 0xb774e0e9 in DetachLayer_Dispatch_Analyze (pSt_ProtocolHdr=0xb0100468, 
    lpszPacket=0xb0100472 "<netflow><host_ip>123.151.47.33</host_ip><host_mac>001C54096111</host_mac><up_flow>302</up_flow><down_flow>0</down_flow><proto><up><ftp>0</ftp><telnet>0</telnet><smtp>0</smtp><http>0</http><pop3>0</po"..., ptszBuffer=0x0, pInt_Len=0xb0100c94) at ./DetachLayer_DllMain.cpp:64
#17 0x0804a588 in NetCenter_PostTask (lParam=0xb0100468) at ./NetCenter_Task.cpp:95
#18 0xb776da21 in CManage_ThreadPool::ManagePool_Thread_Run (lParam=0x8ccfce8) at ./ThreadPool/ThreadPool.cpp:601
#19 0xb74edd4c in start_thread () from /lib/i386-linux-gnu/libpthread.so.0
#20 0xb75f0d3e in clone () from /lib/i386-linux-gnu/libc.so.6

解决方案 »

  1.   

    DataBase_IsErrorOccur = FALSE;    NETDATABASE_MYSQLHANDLE st_hDatabaseMySQL;
        memset(&st_hDatabaseMySQL,'\0',sizeof(st_hDatabaseMySQL));    if (!m_hNetComponents.NetEngine_LibHandleEx_Get(xhNet,&st_hDatabaseMySQL))
        {
            return FALSE;
        }
        pthread_mutex_lock(&st_hDatabaseMySQL.st_csDatabase);
        mysql_ping(&st_hDatabaseMySQL.st_MySQL);
        //执行SQL语句
        if (0 != mysql_real_query(&st_hDatabaseMySQL.st_MySQL,lpszSQLQuery,_tcslen(lpszSQLQuery)))
        {
            printf("数据库执行错误:%s,SQL语句:%s\n",mysql_error(&st_hDatabaseMySQL.st_MySQL),lpszSQLQuery);
            DataBase_IsErrorOccur = TRUE;
            DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_EXEC_ISFAILED;
            pthread_mutex_unlock(&st_hDatabaseMySQL.st_csDatabase);
            return FALSE;
        }
        pthread_mutex_unlock(&st_hDatabaseMySQL.st_csDatabase);
        return TRUE;
      

  2.   

    检查一下 timeout 参数设置。这个查询是不是过大了?或者当时某些表被其它进程锁定?
      

  3.   


    //设定自动连接
    my_bool reconnect = true;
    mysql_options(m_conn, MYSQL_OPT_RECONNECT, &reconnect);
    if(!charset.empty())
    {
    mysql_options(m_conn,MYSQL_SET_CHARSET_NAME,charset.c_str());
    }

    //设置读写超时,注意mysql 版本
    //Before MySQL 5.1.41, this option applies only to TCP/IP 
    //connections and, prior to MySQL 5.1.12, only for Windows.
        mysql_options(m_conn,MYSQL_OPT_READ_TIMEOUT,(void*)&readtimeout);
        mysql_options(m_conn,MYSQL_OPT_WRITE_TIMEOUT,(void*)&writetimeout); if(NULL == mysql_real_connect(m_conn,host.c_str(),
    user.c_str(),password.c_str(),dbname.c_str(),port,NULL,0))
    {
    throw CSql_error(mysql_error(m_conn));
    return false ;
    }