c – Valgind中的错误VgTs_WaitSys是什么意思?
发布时间:2020-12-16 06:57:15 所属栏目:百科 来源:网络整理
导读:我有一个用C编写的服务器,它会在新客户端连接时生成一个新线程.为了测试我的服务器,我编写了一个模拟500个客户端的脚本.服务器处理前几百个客户端,最后我从Valgrind得到以下错误: Thread 456: status = VgTs_WaitSys==4182== at 0x4E383EC: recv (recv.c:34
我有一个用C编写的服务器,它会在新客户端连接时生成一个新线程.为了测试我的服务器,我编写了一个模拟500个客户端的脚本.服务器处理前几百个客户端,最后我从Valgrind得到以下错误:
Thread 456: status = VgTs_WaitSys ==4182== at 0x4E383EC: recv (recv.c:34) ==4182== by 0x4017F1: process_data (socket2.h:45) ==4182== by 0x40195E: thread (FBServer.c:82) ==4182== by 0x4E30A03: start_thread (pthread_create.c:300) ==4182== by 0x532DD4C: clone (clone.S:112) Thread 457: status = VgTs_WaitSys ==4182== at 0x4E383EC: recv (recv.c:34) ==4182== by 0x4017F1: process_data (socket2.h:45) ==4182== by 0x40195E: thread (FBServer.c:82) ==4182== by 0x4E30A03: start_thread (pthread_create.c:300) ==4182== by 0x532DD4C: clone (clone.S:112) ... Thread 499: status = VgTs_WaitSys ==4182== at 0x4E383EC: recv (recv.c:34) ==4182== by 0x4017F1: process_data (socket2.h:45) ==4182== by 0x40195E: thread (FBServer.c:82) ==4182== by 0x4E30A03: start_thread (pthread_create.c:300) ==4182== by 0x532DD4C: clone (clone.S:112) 在FBServer.c的第82行,该线程调用一个名为process_data的函数,该函数从客户端接收数据.函数process_data如下所示: void process_data(int clientSock) { size_t n; char jstring[MAX_LEN + 1]; int bytes_received_so_far = 0; int bytes_count; char *buf = NULL; while(bytes_count = recv(clientSock,jstring,MAX_LEN,0)) { if(bytes_count <= 0) { close(clientSock); pthread_exit(NULL); } printf("Bytes received = %dn",bytes_count); jstring[bytes_count] = ' '; ... ... } } 有人可以帮我解释错误信息. 解决方法
您使用的是什么版本的Valgrind?
关于我在源代码中找到的唯一评论是: VgTs_WaitSys,/ *等待系统调用完成* / 所以它似乎表明该程序只是阻塞系统调用(在你的情况下recv).我不确定,但这可能不是一个错误,只是Valgrind踢出了一些额外的信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |