[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: Re: [PATCH] ntoskrnl.exe: Correctly initialize two CRITICAL_SECTION_DEBUGs
From: Michael Stefaniuc <mstefani () winehq ! org>
Date: 2019-04-30 19:58:15
Message-ID: c7f35e8e-7af2-9922-4bd7-e59b5478a526 () winehq ! org
[Download RAW message or body]
On 4/29/19 9:56 PM, Jacek Caban wrote:
> Jacek Caban <jacek@codeweavers.com>
>
> On 4/29/19 9:13 PM, Michael Stefaniuc wrote:
>> Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
>> ---
>> dlls/ntoskrnl.exe/ntoskrnl.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
>> index b353839c0a..73fe054259 100644
>> --- a/dlls/ntoskrnl.exe/ntoskrnl.c
>> +++ b/dlls/ntoskrnl.exe/ntoskrnl.c
>> @@ -293,7 +293,7 @@ static CRITICAL_SECTION obref_cs;
>> static CRITICAL_SECTION_DEBUG obref_critsect_debug =
>> {
>> 0, 0, &obref_cs,
>> - { &critsect_debug.ProcessLocksList,
>> &critsect_debug.ProcessLocksList },
>> + { &obref_critsect_debug.ProcessLocksList,
>> &obref_critsect_debug.ProcessLocksList },
>> 0, 0, { (DWORD_PTR)(__FILE__ ": obref_cs") }
>> };
>> static CRITICAL_SECTION obref_cs = { &obref_critsect_debug, -1, 0,
>> 0, 0, 0 };
>> @@ -396,7 +396,7 @@ static CRITICAL_SECTION handle_map_cs;
>> static CRITICAL_SECTION_DEBUG handle_map_critsect_debug =
>> {
>> 0, 0, &handle_map_cs,
>> - { &critsect_debug.ProcessLocksList,
>> &critsect_debug.ProcessLocksList },
>> + { &handle_map_critsect_debug.ProcessLocksList,
>> &handle_map_critsect_debug.ProcessLocksList },
>> 0, 0, { (DWORD_PTR)(__FILE__ ": handle_map_cs") }
>> };
>> static CRITICAL_SECTION handle_map_cs = {
>> &handle_map_critsect_debug, -1, 0, 0, 0, 0 };
>
>
> FWIW, it would be nice if declaring a critical section would be easier
> and less error prone. Maybe WINE_STATIC_CRITICAL_SECTION() macro?
There's a reason I wrote the coccinelle script in the first place ;)
Anyway, I have attached an example patch. Once I have a working
coccinelle script to do the transformation I can send it in.
DECLARE_CRITICAL_SECTION() is IMHO a better name, can be prefixed with
WINE_ if so desired.
bye
michael
["cs.diff" (text/x-patch)]
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index d8756a8685..fcade73c0a 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -392,14 +392,7 @@ static const POBJECT_TYPE *known_types[] =
&SeTokenObjectType
};
-static CRITICAL_SECTION handle_map_cs;
-static CRITICAL_SECTION_DEBUG handle_map_critsect_debug =
-{
- 0, 0, &handle_map_cs,
- { &handle_map_critsect_debug.ProcessLocksList, &handle_map_critsect_debug.ProcessLocksList },
- 0, 0, { (DWORD_PTR)(__FILE__ ": handle_map_cs") }
-};
-static CRITICAL_SECTION handle_map_cs = { &handle_map_critsect_debug, -1, 0, 0, 0, 0 };
+DECLARE_CRITICAL_SECTION(handle_map_cs);
NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret )
{
diff --git a/dlls/ntoskrnl.exe/ntoskrnl_private.h b/dlls/ntoskrnl.exe/ntoskrnl_private.h
index 295ff7397c..c338f08e15 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl_private.h
+++ b/dlls/ntoskrnl.exe/ntoskrnl_private.h
@@ -21,6 +21,13 @@
#ifndef __WINE_NTOSKRNL_PRIVATE_H
#define __WINE_NTOSKRNL_PRIVATE_H
+#define DECLARE_CRITICAL_SECTION(cs) \
+ static CRITICAL_SECTION cs; \
+ static CRITICAL_SECTION_DEBUG cs##_debug = \
+ { 0, 0, &cs, { &cs##_debug.ProcessLocksList, &cs##_debug.ProcessLocksList }, \
+ 0, 0, { (DWORD_PTR)(__FILE__ ": " # cs) }}; \
+ static CRITICAL_SECTION cs = { &cs##_debug, -1, 0, 0, 0, 0 };
+
struct _OBJECT_TYPE
{
const WCHAR *name; /* object type name used for type validation */
[Attachment #4 (text/plain)]
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic