Chinaunix

标题: 线程退出异常错误 [打印本页]

作者: newsoil    时间: 2007-01-09 13:17
标题: 线程退出异常错误
线程退出异常错误

我的线程
//**************************************************************
//接收线程
//**************************************************************
void *ServTcp(void *p)
{
        int myfd,ret;
        myfd = (int)p;
        int nBuff;
        char szBuffer[MAX_NETBUF],szBuf[8192];
        char *psz;
       
        //脱离主线程
        pthread_detach(pthread_self());
        nBuff = 0;
        while(g_nRun == 1) //g_nRun = 1,run.g_nRun=-1,exit
        {
                ret = recv(myfd, szBuffer, MAX_NETBUF,0);
                if (ret == -1)
                {
                        perror("recv");
                        CloseSock(myfd);
                        pthread_exit(NULL);
                        return NULL;
                }
                szBuffer[ret] = '\0';

                //对接收的数据进行缓存处理
                strcpy(&szBuf[nBuff], szBuffer);
            psz = MsgRec(szBuf,myfd);
                if (psz)
                {
                        nBuff = strlen(psz);
                        memcpy(szBuf, psz, nBuff);
                        szBuf[nBuff] = '\0';
                }
                else
                {
                        nBuff = 0;
                        //清空该块内存
                        memset(szBuf,0, sizeof(szBuf));
                }
        }

        printf("exit:ServTcp:[ %x ]\n",myfd);
        CloseSock(myfd);
    pthread_exit(NULL);
        return NULL;
}


*** glibc detected *** ./kserver: free(): invalid next size (fast): 0x0863d9d0 ***
======= Backtrace: =========
/lib/libc.so.6[0x639efd]
/lib/libc.so.6(cfree+0x90)[0x63d550]
/lib/libc.so.6[0x5f8780]
/lib/libc.so.6[0x5f7ff2]
/lib/libc.so.6(dcgettext+0x43)[0x5f7123]
/lib/libc.so.6(__strerror_r+0x119)[0x640299]
/lib/libc.so.6(perror+0x14d)[0x62718d]
./kserver[0x804f299]
/lib/libpthread.so.0[0x7473db]
/lib/libc.so.6(clone+0x5e)[0x6a106e]
======= Memory map: ========
002fd000-00308000 r-xp 00000000 fd:00 1640967    /lib/libgcc_s-4.1.1-20061011.so.1
00308000-00309000 rwxp 0000a000 fd:00 1640967    /lib/libgcc_s-4.1.1-20061011.so.1
005b7000-005d0000 r-xp 00000000 fd:00 1640964    /lib/ld-2.5.so
005d0000-005d1000 r-xp 00018000 fd:00 1640964    /lib/ld-2.5.so
005d1000-005d2000 rwxp 00019000 fd:00 1640964    /lib/ld-2.5.so
005d4000-0070b000 r-xp 00000000 fd:00 1640965    /lib/libc-2.5.so
0070b000-0070d000 r-xp 00137000 fd:00 1640965    /lib/libc-2.5.so
0070d000-0070e000 rwxp 00139000 fd:00 1640965    /lib/libc-2.5.so
0070e000-00711000 rwxp 0070e000 00:00 0
00742000-00755000 r-xp 00000000 fd:00 1640968    /lib/libpthread-2.5.so
00755000-00756000 r-xp 00012000 fd:00 1640968    /lib/libpthread-2.5.so
00756000-00757000 rwxp 00013000 fd:00 1640968    /lib/libpthread-2.5.so
00757000-00759000 rwxp 00757000 00:00 0
00b26000-00b27000 r-xp 00b26000 00:00 0          [vdso]
08048000-08055000 r-xp 00000000 03:06 425988     /home/share/server/src/K3S/kserver
08055000-08056000 rw-p 0000c000 03:06 425988     /home/share/server/src/K3S/kserver
08056000-0805c000 rw-p 08056000 00:00 0
0863d000-086a0000 rw-p 0863d000 00:00 0
b5300000-b5321000 rw-p b5300000 00:00 0
b5321000-b5400000 ---p b5321000 00:00 0
b54bf000-b54d1000 r--p 00000000 fd:00 1021988    /usr/share/locale/zh_CN/LC_MESSAGES/libc.mo
b54d1000-b54d2000 rw-p b54d1000 00:00 0
b54d2000-b54d3000 ---p b54d2000 00:00 0
b54d3000-b5ed3000 rw-p b54d3000 00:00 0
b5ed3000-b5ed4000 ---p b5ed3000 00:00 0
b5ed4000-b68d4000 rw-p b5ed4000 00:00 0
b68d4000-b68d5000 ---p b68d4000 00:00 0
b68d5000-b72d5000 rw-p b68d5000 00:00 0
b72d5000-b72d6000 ---p b72d5000 00:00 0
b72d6000-b7cd7000 rw-p b72d6000 00:00 0
b7cd7000-b7cd8000 r--p 00d28000 fd:00 1022366    /usr/lib/locale/locale-archive
b7cd8000-b7d14000 r--p 00cea000 fd:00 1022366    /usr/lib/locale/locale-archive
b7d14000-b7f14000 r--p 00000000 fd:00 1022366    /usr/lib/locale/locale-archive
b7f14000-b7f15000 rw-p b7f14000 00:00 0
b7f1e000-b7f20000 rw-p b7f1e000 00:00 0
bfce2000-bfda4000 rw-p bfce2000 00:00 0          [stack]
已放弃


我的分机连接一会在断开就会出错。
但是如果是刚刚连接时间不是很久就断开就没是,很奇怪。
作者: newsoil    时间: 2007-01-09 18:41
顶上去,
没人可以关注一下吗?
作者: sevendays    时间: 2007-01-10 09:21
怎么会没人关注呢,是你提供的信息太少
至少你要用gdb分析一下core文件,看看提示信息
从你贴的信息来看,是内存管理的问题,你最好把整个程序都贴出来

不过,从来没有莫名其妙的问题....仔细排查吧


原帖由 newsoil 于 2007-1-9 18:41 发表
顶上去,
没人可以关注一下吗?

作者: 57732690    时间: 2007-01-18 15:33
标题: 关注~
我也遇到相似的情况,我的是子线程运行到pthread_detach()那句后就跳回主程序,然后退出了,不知道哪里出了问题,有人给解答下吗?
作者: ssffzz1    时间: 2007-01-18 16:15
strcpy(&szBuf[nBuff], szBuffer);
这句中的nBuff是干什么的.
作者: 57732690    时间: 2007-01-18 18:38
是szBuf的长度
作者: lanying_wzw    时间: 2007-01-18 19:00
什么平台,是不是字节对齐的问题?
作者: smltiger    时间: 2007-01-18 22:53
用gdb试试吧,如果不行那就只有自己手动printf了
作者: langue    时间: 2007-01-18 22:57
====

楼主的程序好乱啊,请把要求说一下,我看看能不能改写。

====




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2