From b6868c6e7867cd1808633d41f574f1ab42afcd4b Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Thu, 21 Mar 2013 03:16:42 +0100 Subject: [PATCH] nfs4: Fix CID 991756: do not delete RPC::Request if (re)sending fails --- src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp | 7 ++++--- src/add-ons/kernel/file_systems/nfs4/Request.cpp | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp b/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp index 811d3d4a5a..7190fee8db 100644 --- a/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/RPCServer.cpp @@ -161,7 +161,10 @@ Server::SendCallAsync(Call* call, Reply** reply, Request** request) fRequests.AddRequest(req); *request = req; - return ResendCallAsync(call, req); + status_t error = ResendCallAsync(call, req); + if (error != B_OK) + delete req; + return error; } @@ -173,7 +176,6 @@ Server::ResendCallAsync(Call* call, Request* request) if (fThreadError != B_OK && Repair() != B_OK) { fRequests.FindRequest(request->fXID); - delete request; return fThreadError; } @@ -181,7 +183,6 @@ Server::ResendCallAsync(Call* call, Request* request) status_t result = fConnection->Send(stream.Buffer(), stream.Size()); if (result != B_OK) { fRequests.FindRequest(request->fXID); - delete request; return result; } diff --git a/src/add-ons/kernel/file_systems/nfs4/Request.cpp b/src/add-ons/kernel/file_systems/nfs4/Request.cpp index b8e8f9663d..96fa49ca34 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Request.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Request.cpp @@ -56,6 +56,7 @@ Request::_SendUDP(Cookie* cookie) if (result != B_OK) { if (cookie != NULL) cookie->UnregisterRequest(rpc); + delete rpc; return result; }