我在我的一個項目中在Linux下使用gSOAP,並且在長時間使用服務器時遇到問題(實際上不是很長,在10小時之後出現此錯誤...)。我跟着前一段時間的例子here在gSOAP中進行多線程。我創建一個soap服務,然後使用copy方法並將它傳遞給一個線程。線程功能是這樣的:gSOAP多線程複製分段錯誤
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
}
}
在我看來,肥皂服務清理正確執行,有什麼我失蹤?
感謝
顯示問題的堆棧跟蹤將有助於您正在使用的gsoap的版本以及您正在運行的操作系統的詳細信息。如果可以的話,我會建議在valgrind下運行該程序,並查看報告的內容(如果有的話)。 – Jackson 2012-07-23 09:22:29
gSOAP 2.8.9,CentOS 6 – cpl 2012-07-23 12:16:57