[SHELL32] Fix a directory handle leak when browsing folders
authorPierre Schweitzer <pierre@reactos.org>
Tue, 6 Mar 2018 19:22:50 +0000 (20:22 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Tue, 6 Mar 2018 19:30:21 +0000 (20:30 +0100)
commitda8a41b97bef45f28a1c85c17b99b1bfe22b4008
treef9cec2a84f6dfc683f69bac00006525d9b6954dc
parentad301e6604fac825622949e909bc41ac145c826e
[SHELL32] Fix a directory handle leak when browsing folders

A bit of history: in r71528, I tried to fix our explorer often
crashing while browsing directories. It was linked to the fact
that a notification result may arrive while the notification
structure had already been deleted.

The fix for this was actually broken and was leading to a double
leak: the notification structure was leaked. But also the handle
to the directory that had been browsed!
This means that the directory couldn't be modified anymore as
a leaked handle to it was still open.

Actually, when notifications are cancel, the kernel properly
calls the notification routine, but with a specific error code.
So the correct fix is to stop handling that notification when
we receive this error code. This is the correct fix with no leaks.

This commit is a complete r71528 revert with the appropriate fix.

CORE-10941
CORE-12843
dll/win32/shell32/wine/changenotify.c