プロジェクトの 1 つで Linux で gSOAP を使用していますが、サーバーをかなり長時間使用すると問題が発生します (実際にはそれほど長くはありません。10 時間ほど後にこのエラーが発生します...)。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
}
}
ソープ サービスのクリーンアップが正しく実行されているように思えますが、不足しているものはありますか?
ありがとう