gSOAP多线程复制分段故障

时间:2012-07-23 08:33:56

标签: c++ gsoap

我在我的一个项目中使用Linux下的gSOAP,并且在使用服务器很长时间时遇到问题(实际上不是很长,我在10小时之后得到这个错误......)。我跟着前一段时间给出了here的例子,用于gSOAP中的多线程处理。我创建一个soap服务,然后使用copy方法并将其传递给一个线程。线程函数是这样的:

void MyClass::SoapServer(myservice::Service* soapService)
{
    int res = soapService->serve();
    if (res != SOAP_OK)
    {
        // log error
    }
    soapService->destroy();
    soap_free(soapService);
}

几个小时后,当有一个调用SOAP函数的常量轮询器时,我在gSOAP复制函数中出现了分段错误。下面我附上接受连接并创建线程的代码。

while(true)
{
    int error = mySoapService.accept();
    if (!soap_valid_socket(error))
{
        //error
    }
    else
    {
        myservice::Service *soapServiceCopy = NULL;
        soapServiceCopy = mySoapService.copy();
        // create thread using the SoapServer function 
        // and pass soapServiceCopy as an argument         
    }
}

在我看来,肥皂服务清理是正确执行的,有什么我想念的吗?

由于

1 个答案:

答案 0 :(得分:0)

您链接到的代码和我的示例之间的区别在于您使用soap_free()释放soapService对象,我的示例使用delete。更改我的示例代码以使用soap_free(),然后在valgrind下运行它会导致报告的free / delete / delete []不匹配,这使我认为soap_free()是建立在free之上但{{1}方法是使用new来创建副本。