[ros-dev] [ros-diffs] [rmessiant] 53729: [NTOSKRNL] Disable normal APC delivery while acquiring/releasing a heap lock. Also, BOOLEAN != NTSTATUS.

Timo Kreuzer timo.kreuzer at web.de
Sun Sep 18 09:36:14 UTC 2011


Am 17.09.2011 22:26, schrieb rmessiant at svn.reactos.org:
> Author: rmessiant
> Date: Sat Sep 17 20:26:31 2011
> New Revision: 53729
>
> URL: http://svn.reactos.org/svn/reactos?rev=53729&view=rev
> Log:
> [NTOSKRNL]
> Disable normal APC delivery while acquiring/releasing a heap lock. Also, BOOLEAN != NTSTATUS.
>
>
> Modified:
>      trunk/reactos/ntoskrnl/rtl/libsupp.c
>
> Modified: trunk/reactos/ntoskrnl/rtl/libsupp.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/rtl/libsupp.c?rev=53729&r1=53728&r2=53729&view=diff
> ==============================================================================
> --- trunk/reactos/ntoskrnl/rtl/libsupp.c [iso-8859-1] (original)
> +++ trunk/reactos/ntoskrnl/rtl/libsupp.c [iso-8859-1] Sat Sep 17 20:26:31 2011
> @@ -168,7 +168,10 @@
>   RtlEnterHeapLock(
>       PHEAP_LOCK Lock)
>   {
> -    return ExAcquireResourceExclusive(&Lock->Resource, TRUE);
> +    KeEnterCriticalRegion();
> +    ExAcquireResourceExclusive(&Lock->Resource, TRUE);
> +    KeLeaveCriticalRegion();
> +    return STATUS_SUCCESS;
>   }
>
>   NTSTATUS
> @@ -185,7 +188,9 @@
>   RtlLeaveHeapLock(
>       PHEAP_LOCK Lock)
>   {
> +    KeEnterCriticalRegion();
>       ExReleaseResource(&Lock->Resource);
> +    KeLeaveCriticalRegion();
>       return STATUS_SUCCESS;
>   }
>   

Why enable APC delivery after the resource is acquired?
It should stay disabled to prevent deadlocks.





More information about the Ros-dev mailing list