c - 错误 VgTs_WaitSys 在 Valgrind 中意味着什么?

标签 c multithreading valgrind

我有一个用 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 = %d\n", bytes_count);                           
        jstring[bytes_count] = '\0';

        ...
        ...
    }
}

谁能帮我解释错误信息。

最佳答案

您使用的是哪个版本的 Valgrind?

关于我在源代码中能找到的唯一评论是:

VgTs_WaitSys,/* 等待系统调用完成 */

所以它似乎表明该程序只是在系统调用(在您的情况下为 recv)上阻塞。我不确定,但这可能根本不是错误,只是 Valgrind 排除的一些额外信息。

关于c - 错误 VgTs_WaitSys 在 Valgrind 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6993677/

相关文章:

c - 在 OS X 10.9 上的 Xcode 6 中运行基于 Makefile 的 C 项目

python - Python 的垃圾收集器会损害我的应用程序吗?

Java:Thread.currentThread().sleep(x) 与 Thread.sleep(x)

c++ - valgrind 和 openmp,仍然可以访问并可能丢失,这很糟糕吗?

c++ - std::future 的错误用法?

c++ - 将负数存储在 char 数组中(仍然没有所需/所需的解决方案)

c++ - 从 c 函数在 qtextedit 上显示消息

c - volatile 整数与计算机安全

java - 我如何在 Java 中同时完成 80,000 次下载?

c - 代码中的内存错误和可能的解决方案