From 46d76d8821f4c8476499757d509ce1a6bab764b1 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 11 Apr 2012 00:29:03 -0400 Subject: [PATCH] Windows: Do not delete in CleanupFile if error If an error was detected when processing RDR_CleanupFileEntry() do not perform the file deletion. Just return the error as attempting the deletion could result in an exception. Change-Id: I57b17a15d1bdda4d0890dbe59f9e2432d465250f Reviewed-on: http://gerrit.openafs.org/7186 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/user/RDRFunction.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/WINNT/afsrdr/user/RDRFunction.c b/src/WINNT/afsrdr/user/RDRFunction.c index cc5a4c7c5..670e8ced0 100644 --- a/src/WINNT/afsrdr/user/RDRFunction.c +++ b/src/WINNT/afsrdr/user/RDRFunction.c @@ -1985,7 +1985,7 @@ RDR_CleanupFileEntry( IN cm_user_t *userp, if (bScpLocked) lock_ReleaseWrite(&scp->rw); - if (dscp && bDeleteFile) { + if (code == 0 && dscp && bDeleteFile) { WCHAR FileName[260]; StringCchCopyNW(FileName, 260, FileNameCounted, FileNameLength / sizeof(WCHAR)); @@ -1996,16 +1996,16 @@ RDR_CleanupFileEntry( IN cm_user_t *userp, code = cm_Unlink(dscp, NULL, FileName, userp, &req); } - if ( ResultBufferLength >= sizeof( AFSFileCleanupResultCB)) - { - (*ResultCB)->ResultBufferLength = sizeof( AFSFileCleanupResultCB); - pResultCB = (AFSFileCleanupResultCB *)&(*ResultCB)->ResultData; - pResultCB->ParentDataVersion.QuadPart = dscp ? dscp->dataVersion : 0; - } else { - (*ResultCB)->ResultBufferLength = 0; - } + if (code == 0) + if ( ResultBufferLength >= sizeof( AFSFileCleanupResultCB)) + { + (*ResultCB)->ResultBufferLength = sizeof( AFSFileCleanupResultCB); + pResultCB = (AFSFileCleanupResultCB *)&(*ResultCB)->ResultData; + pResultCB->ParentDataVersion.QuadPart = dscp ? dscp->dataVersion : 0; + } else { + (*ResultCB)->ResultBufferLength = 0; + } - if (code == 0) { (*ResultCB)->ResultStatus = 0; osi_Log0(afsd_logp, "RDR_CleanupFileEntry SUCCESS"); } else { @@ -2014,6 +2014,7 @@ RDR_CleanupFileEntry( IN cm_user_t *userp, osi_Log2(afsd_logp, "RDR_CleanupFileEntry FAILURE code=0x%x status=0x%x", code, status); } + if (scp) cm_ReleaseSCache(scp); if (dscp) -- 2.39.5