Correct patch format.
Signed-off-by: Guangmu Zhu <guangmu...@gmail.com> --- qga/vss-win32/requester.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp index 9b3e310..337f722 100644 --- a/qga/vss-win32/requester.cpp +++ b/qga/vss-win32/requester.cpp @@ -47,6 +47,7 @@ static struct QGAVSSContext { HANDLE hEventFrozen; /* notify fs/writer freeze from provider */ HANDLE hEventThaw; /* request provider to thaw */ HANDLE hEventTimeout; /* notify timeout in provider */ + BOOL bWriterMetadataGathered; /* TRUE if GatherWriterMetadata succeed */ int cFrozenVols; /* number of frozen volumes */ } vss_ctx; @@ -92,6 +93,8 @@ STDAPI requester_init(void) static void requester_cleanup(void) { + HRESULT hr = S_OK; + if (vss_ctx.hEventFrozen) { CloseHandle(vss_ctx.hEventFrozen); vss_ctx.hEventFrozen = NULL; @@ -108,6 +111,12 @@ static void requester_cleanup(void) vss_ctx.pAsyncSnapshot->Release(); vss_ctx.pAsyncSnapshot = NULL; } + if (vss_ctx.bWriterMetadataGathered) { + hr = vss_ctx.pVssbc->FreeWriterMetadata(); + if (FAILED(hr)) { + err_set(errset, hr, "failed to free writer metadata"); + } + } if (vss_ctx.pVssbc) { vss_ctx.pVssbc->Release(); vss_ctx.pVssbc = NULL; @@ -323,8 +332,10 @@ void requester_freeze(int *num_vols, ErrorSet *errset) } if (FAILED(hr)) { err_set(errset, hr, "failed to gather writer metadata"); + vss_ctx.bWriterMetadataGathered = FALSE; goto out; } + vss_ctx.bWriterMetadataGathered = TRUE; AddComponents(errset); if (err_is_set(errset)) { -- 2.1.4 ------------------------------------ FreeWriterMetadata() should be called if GatherWriterMetadata() succeeded. diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp index 9b3e310..337f722 100644 --- a/qga/vss-win32/requester.cpp +++ b/qga/vss-win32/requester.cpp @@ -47,6 +47,7 @@ static struct QGAVSSContext { HANDLE hEventFrozen; /* notify fs/writer freeze from provider */ HANDLE hEventThaw; /* request provider to thaw */ HANDLE hEventTimeout; /* notify timeout in provider */ + BOOL bWriterMetadataGathered; /* TRUE if GatherWriterMetadata succeed */ int cFrozenVols; /* number of frozen volumes */ } vss_ctx; @@ -92,6 +93,8 @@ STDAPI requester_init(void) static void requester_cleanup(void) { + HRESULT hr = S_OK; + if (vss_ctx.hEventFrozen) { CloseHandle(vss_ctx.hEventFrozen); vss_ctx.hEventFrozen = NULL; @@ -108,6 +111,12 @@ static void requester_cleanup(void) vss_ctx.pAsyncSnapshot->Release(); vss_ctx.pAsyncSnapshot = NULL; } + if (vss_ctx.bWriterMetadataGathered) { + hr = vss_ctx.pVssbc->FreeWriterMetadata(); + if (FAILED(hr)) { + err_set(errset, hr, "failed to free writer metadata"); + } + } if (vss_ctx.pVssbc) { vss_ctx.pVssbc->Release(); vss_ctx.pVssbc = NULL; @@ -323,8 +332,10 @@ void requester_freeze(int *num_vols, ErrorSet *errset) } if (FAILED(hr)) { err_set(errset, hr, "failed to gather writer metadata"); + vss_ctx.bWriterMetadataGathered = FALSE; goto out; } + vss_ctx.bWriterMetadataGathered = TRUE; AddComponents(errset); if (err_is_set(errset)) {