Signed-off-by: Derek Lesho dereklesho52@Gmail.com --- dlls/ntoskrnl.exe/ntoskrnl.c | 13 ++++++++ dlls/ntoskrnl.exe/ntoskrnl_private.h | 4 +++ server/thread.c | 46 ++++++++++++++++------------ server/thread.h | 1 + 4 files changed, 45 insertions(+), 19 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 77a610d7db..fd75cdc886 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2484,15 +2484,28 @@ PEPROCESS WINAPI IoGetCurrentProcess(void) }
+static void *create_thread_object( HANDLE handle ); + static const WCHAR thread_type_name[] = {'T','h','r','e','a','d',0};
static struct _OBJECT_TYPE thread_type = { thread_type_name, + create_thread_object };
POBJECT_TYPE PsThreadType = &thread_type;
+static void *create_thread_object( HANDLE handle ) +{ + PETHREAD thread; + + if (!(thread = alloc_kernel_object( PsThreadType, handle, sizeof(*thread), 0 ))) return NULL; + + thread->Header.WaitListHead.Blink = INVALID_HANDLE_VALUE; + return thread; +} +
/*********************************************************************** * KeGetCurrentThread / PsGetCurrentThread (NTOSKRNL.EXE.@) diff --git a/dlls/ntoskrnl.exe/ntoskrnl_private.h b/dlls/ntoskrnl.exe/ntoskrnl_private.h index 82ee18e56a..700738adc3 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl_private.h +++ b/dlls/ntoskrnl.exe/ntoskrnl_private.h @@ -40,6 +40,10 @@ extern POBJECT_TYPE PsThreadType; extern POBJECT_TYPE SeTokenObjectType;
+struct _ETHREAD { + DISPATCHER_HEADER Header; +}; + #ifdef __i386__ #define DEFINE_FASTCALL1_WRAPPER(func) \ __ASM_STDCALL_FUNC( __fastcall_ ## func, 4, \ diff --git a/server/thread.c b/server/thread.c index f5f98ebef1..b524c64452 100644 --- a/server/thread.c +++ b/server/thread.c @@ -134,28 +134,29 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry ) static unsigned int thread_map_access( struct object *obj, unsigned int access ); static void thread_poll_event( struct fd *fd, int event ); static void destroy_thread( struct object *obj ); +static struct list *thread_get_kernel_object_list( struct object *obj );
static const struct object_ops thread_ops = { - sizeof(struct thread), /* size */ - dump_thread, /* dump */ - thread_get_type, /* get_type */ - add_queue, /* add_queue */ - remove_queue, /* remove_queue */ - thread_signaled, /* signaled */ - no_satisfied, /* satisfied */ - no_signal, /* signal */ - no_get_fd, /* get_fd */ - thread_map_access, /* map_access */ - default_get_sd, /* get_sd */ - default_set_sd, /* set_sd */ - no_lookup_name, /* lookup_name */ - no_link_name, /* link_name */ - NULL, /* unlink_name */ - no_open_file, /* open_file */ - no_kernel_obj_list, /* get_kernel_obj_list */ - no_close_handle, /* close_handle */ - destroy_thread /* destroy */ + sizeof(struct thread), /* size */ + dump_thread, /* dump */ + thread_get_type, /* get_type */ + add_queue, /* add_queue */ + remove_queue, /* remove_queue */ + thread_signaled, /* signaled */ + no_satisfied, /* satisfied */ + no_signal, /* signal */ + no_get_fd, /* get_fd */ + thread_map_access, /* map_access */ + default_get_sd, /* get_sd */ + default_set_sd, /* set_sd */ + no_lookup_name, /* lookup_name */ + no_link_name, /* link_name */ + NULL, /* unlink_name */ + no_open_file, /* open_file */ + thread_get_kernel_object_list, /* get_kernel_obj_list */ + no_close_handle, /* close_handle */ + destroy_thread /* destroy */ };
static const struct fd_ops thread_fd_ops = @@ -206,6 +207,7 @@ static inline void init_thread_structure( struct thread *thread ) thread->creation_time = current_time; thread->exit_time = 0;
+ list_init( &thread->kernel_object ); list_init( &thread->mutex_list ); list_init( &thread->system_apc ); list_init( &thread->user_apc ); @@ -391,6 +393,12 @@ static unsigned int thread_map_access( struct object *obj, unsigned int access ) return access & ~(GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | GENERIC_ALL); }
+static struct list *thread_get_kernel_object_list( struct object *obj ) +{ + struct thread *thread = (struct thread *)obj; + return &thread->kernel_object; +} + static void dump_thread_apc( struct object *obj, int verbose ) { struct thread_apc *apc = (struct thread_apc *)obj; diff --git a/server/thread.h b/server/thread.h index e4332df4ab..758bbf7c8c 100644 --- a/server/thread.h +++ b/server/thread.h @@ -49,6 +49,7 @@ struct inflight_fd struct thread { struct object obj; /* object header */ + struct list kernel_object; /* list of kernel object pointers */ struct list entry; /* entry in system-wide thread list */ struct list proc_entry; /* entry in per-process thread list */ struct process *process;
Signed-off-by: Derek Lesho dereklesho52@Gmail.com --- dlls/ntoskrnl.exe/ntoskrnl.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index fd75cdc886..61a3e4ba92 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2512,8 +2512,16 @@ static void *create_thread_object( HANDLE handle ) */ PRKTHREAD WINAPI KeGetCurrentThread(void) { - FIXME("() stub\n"); - return NULL; + HANDLE hThread; + PKTHREAD thread_object = NULL; + + if ((hThread = OpenThread( THREAD_ALL_ACCESS, 0, HandleToUlong(PsGetCurrentThreadId()) ))) + { + kernel_object_from_handle( hThread, PsThreadType, (void**)&thread_object); + NtClose(hThread); + } + + return thread_object; }
/***********************************************************************
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=50104
Your paranoid android.
=== debian9 (32 bit report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (32 bit Chinese:China report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (32 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (64 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
Signed-off-by: Derek Lesho dereklesho52@Gmail.com --- dlls/ntoskrnl.exe/ntoskrnl.c | 23 +++++++++++++++++++++++ dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/tests/driver.c | 19 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 61a3e4ba92..335918f99f 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2987,6 +2987,29 @@ HANDLE WINAPI PsGetCurrentThreadId(void) }
+/*********************************************************************** + * PsIsSystemThread (NTOSKRNL.EXE.@) + */ +BOOLEAN WINAPI PsIsSystemThread(PETHREAD thread) +{ + HANDLE hThread; + DWORD tid = 0; + + if (!thread) + return TRUE; + + /* get handle, then id */ + if ((hThread = kernel_object_handle( thread, THREAD_ALL_ACCESS ))) + { + tid = GetProcessId( hThread ); + NtClose(hThread); + } + + /* Should only show up as client_tid but request_thread is added for redundancy */ + return tid != client_tid && tid != request_thread; +} + + /*********************************************************************** * PsGetVersion (NTOSKRNL.EXE.@) */ diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 43f47470a9..0e9e6a7630 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -907,7 +907,7 @@ @ stdcall PsImpersonateClient(ptr ptr long long long) @ stub PsInitialSystemProcess @ stub PsIsProcessBeingDebugged -@ stub PsIsSystemThread +@ stdcall PsIsSystemThread(ptr) @ stub PsIsThreadImpersonating @ stub PsIsThreadTerminating @ stub PsJobType diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c index 88237461d5..c436f2c3d9 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -814,6 +814,24 @@ static void test_ob_reference(const WCHAR *test_path) ok(!status, "ZwClose failed: %#x\n", status); }
+static void WINAPI system_thread( void *arg ) +{ + BOOLEAN result; + + ok((result = PsIsSystemThread()), "got %u\n", result); + + PsTerminateSystemThread( STATUS_SUCCESS ); +} + +static void test_system_thread() +{ + BOOLEAN result; + + ok(!(result = PsIsSystemThread()), "got %u\n", result); + + run_thread( system_thread, (void*)0 ); +} + static NTSTATUS main_test(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR *info) { ULONG length = stack->Parameters.DeviceIoControl.OutputBufferLength; @@ -856,6 +874,7 @@ static NTSTATUS main_test(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *st test_stack_callout(); test_lookaside_list(); test_ob_reference(test_input->path); + test_system_thread();
/* print process report */ if (winetest_debug)
On 2019-03-28 21:47, Derek Lesho wrote:
- ok((result = PsIsSystemThread()), "got %u\n", result);
This type of construct depends on argument evaluation order and is undefined behavior. The assignment needs to happen before the ok().
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=50105
Your paranoid android.
=== build (build log) ===
collect2: error: ld returned 1 exit status Makefile:204: recipe for target 'driver.dll' failed Makefile:7615: recipe for target 'dlls/ntoskrnl.exe/tests' failed Task: The exe32 Wine crossbuild failed
=== debian9 (32 bit report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit French report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit Japanese:Japan report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit Chinese:China report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (64 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
It looks like the header definition for PsIsSystemThread is missing, since I forgot to add that file to the commit.
Either way, this patch should be ignored, Jacek discussed a better way of implementing it on the IRC yesterday.
On Fri, Mar 29, 2019 at 2:10 PM Marvin testbot@winehq.org wrote:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=50105
Your paranoid android.
=== build (build log) ===
collect2: error: ld returned 1 exit status Makefile:204: recipe for target 'driver.dll' failed Makefile:7615: recipe for target 'dlls/ntoskrnl.exe/tests' failed Task: The exe32 Wine crossbuild failed
=== debian9 (32 bit report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit French report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit Japanese:Japan report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit Chinese:China report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (64 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
Signed-off-by: Derek Lesho dereklesho52@Gmail.com --- dlls/ntoskrnl.exe/ntoskrnl.c | 20 ++++++++++++++++++++ dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 335918f99f..85235a444d 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3262,6 +3262,26 @@ NTSTATUS WINAPI PsLookupProcessByProcessId(HANDLE processid, PEPROCESS *process) }
+/***************************************************** + * PsLookupThreadByThreadId (NTOSKRNL.EXE.@) + */ +NTSTATUS WINAPI PsLookupThreadByThreadId(HANDLE threadid, PETHREAD *thread) +{ + NTSTATUS status; + HANDLE hThread = OpenThread( THREAD_ALL_ACCESS, FALSE, HandleToUlong(threadid) ); + + if (!hThread) + return STATUS_INVALID_PARAMETER; + + status = kernel_object_from_handle( hThread, PsThreadType, (void**)thread ); + + ObReferenceObject( *thread ); + + NtClose( hThread ); + return status; +} + + /***************************************************** * IoSetThreadHardErrorMode (NTOSKRNL.EXE.@) */ diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 0e9e6a7630..f8d73450de 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -913,7 +913,7 @@ @ stub PsJobType @ stdcall PsLookupProcessByProcessId(ptr ptr) @ stub PsLookupProcessThreadByCid -@ stub PsLookupThreadByThreadId +@ stdcall PsLookupThreadByThreadId(ptr ptr) @ extern PsProcessType @ stub PsReferenceImpersonationToken @ stub PsReferencePrimaryToken
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=50106
Your paranoid android.
=== debian9 (32 bit report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit Chinese:China report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (64 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
Signed-off-by: Derek Lesho dereklesho52@Gmail.com --- dlls/ntoskrnl.exe/ntoskrnl.c | 21 +++++++++++++++++++-- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/ntoskrnl_private.h | 1 + 3 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 85235a444d..675ad59924 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2503,6 +2503,7 @@ static void *create_thread_object( HANDLE handle ) if (!(thread = alloc_kernel_object( PsThreadType, handle, sizeof(*thread), 0 ))) return NULL;
thread->Header.WaitListHead.Blink = INVALID_HANDLE_VALUE; + thread->critical_region = 0; return thread; }
@@ -3448,7 +3449,10 @@ void WINAPI ExReleaseResourceForThreadLite( PERESOURCE resource, ERESOURCE_THREA */ void WINAPI KeEnterCriticalRegion(void) { - FIXME(": stub\n"); + PETHREAD thread = (PETHREAD) KeGetCurrentThread(); + + /* FIXME: actually disable certain APCs */ + thread->critical_region = TRUE; }
/*********************************************************************** @@ -3456,7 +3460,10 @@ void WINAPI KeEnterCriticalRegion(void) */ void WINAPI KeLeaveCriticalRegion(void) { - FIXME(": stub\n"); + PETHREAD thread = (PETHREAD) KeGetCurrentThread(); + + /* FIXME: actually re-enable certain APCs */ + thread->critical_region = FALSE; }
/*********************************************************************** @@ -4396,3 +4403,13 @@ ULONG WINAPI ExSetTimerResolution(ULONG time, BOOLEAN set_resolution) FIXME("stub: %u %d\n", time, set_resolution); return KeQueryTimeIncrement(); } + +/********************************************************************* + * KeAreApcsDisabled (NTOSKRNL.@) + */ +BOOLEAN WINAPI KeAreApcsDisabled(void) +{ + PETHREAD thread = (PETHREAD) KeGetCurrentThread(); + + return thread->critical_region; +} diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index f8d73450de..cd5c643259 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -520,7 +520,7 @@ @ stdcall KeAcquireSpinLockAtDpcLevel(ptr) @ stdcall -arch=arm,arm64,x86_64 KeAcquireSpinLockRaiseToDpc(ptr) @ stub KeAddSystemServiceTable -@ stub KeAreApcsDisabled +@ stdcall KeAreApcsDisabled() @ stub KeAttachProcess @ stub KeBugCheck @ stub KeBugCheckEx diff --git a/dlls/ntoskrnl.exe/ntoskrnl_private.h b/dlls/ntoskrnl.exe/ntoskrnl_private.h index 700738adc3..4cc0be153e 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl_private.h +++ b/dlls/ntoskrnl.exe/ntoskrnl_private.h @@ -42,6 +42,7 @@ extern POBJECT_TYPE SeTokenObjectType;
struct _ETHREAD { DISPATCHER_HEADER Header; + BOOLEAN critical_region; };
#ifdef __i386__
On 2019-03-28 21:47, Derek Lesho wrote:
@@ -3448,7 +3449,10 @@ void WINAPI ExReleaseResourceForThreadLite( PERESOURCE resource, ERESOURCE_THREA */ void WINAPI KeEnterCriticalRegion(void) {
- FIXME(": stub\n");
- PETHREAD thread = (PETHREAD) KeGetCurrentThread();
- /* FIXME: actually disable certain APCs */
- thread->critical_region = TRUE; }
Critical regions can be nested, so you'd need a counter instead of a boolean.
On 2019-03-28 21:47, Derek Lesho wrote:
+/*********************************************************************
KeAreApcsDisabled (NTOSKRNL.@)
- */
+BOOLEAN WINAPI KeAreApcsDisabled(void) +{
- PETHREAD thread = (PETHREAD) KeGetCurrentThread();
- return thread->critical_region;
+}
This may not be important for now, but this function will also return true if the current IRQL is APC_LEVEL or higher. So perhaps "|| KeGetCurrentIrql() > 0" or a FIXME could make sense.
While we're at it, the function will also return true if you're inside a guarded region. Though that's likely even less relevant at this point ;)
On Fri, Mar 29, 2019 at 7:57 AM Thomas Faber thomas.faber@reactos.org wrote:
This may not be important for now, but this function will also return true if the current IRQL is APC_LEVEL or higher. So perhaps "|| KeGetCurrentIrql() > 0" or a FIXME could make sense.
I thought about doing this, and I have another patch in the pipeline that adds some basic IRQL stuff, but the MSDN page for this functions says "The KeAreApcsDisabled routine returns whether the calling thread is within a critical region or a guarded region, which disables normal kernel APC delivery.", so it sounds like they check whether you are in a region, not the IRQL level. Or maybe that's just bad documentation?
While we're at it, the function will also return true if you're inside a guarded region. Though that's likely even less relevant at this point ;)
Yeah, good point, might be a good idea to get it out of the way for anyone who has to deal with it in the future.
On 2019-03-29 19:20, Derek Lesho wrote:
On Fri, Mar 29, 2019 at 7:57 AM Thomas Faber thomas.faber@reactos.org wrote:
This may not be important for now, but this function will also return true if the current IRQL is APC_LEVEL or higher. So perhaps "|| KeGetCurrentIrql() > 0" or a FIXME could make sense.
I thought about doing this, and I have another patch in the pipeline that adds some basic IRQL stuff, but the MSDN page for this functions says "The KeAreApcsDisabled routine returns whether the calling thread is within a critical region or a guarded region, which disables normal kernel APC delivery.", so it sounds like they check whether you are in a region, not the IRQL level. Or maybe that's just bad documentation?
You're right, my apologies. I checked my test[1] and KeAreApcsDisabled indeed ignores the IRQL. It's KeAreAllApcsDisabled that will return TRUE if you're at APC_LEVEL. So your patch is obviously fine in this regard!
[1] https://github.com/reactos/reactos/blob/master/modules/rostests/kmtests/ntos...
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=50107
Your paranoid android.
=== debian9 (32 bit report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit Chinese:China report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (32 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
=== debian9 (64 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2 driver.c:830: Test failed: got 0
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=50103
Your paranoid android.
=== debian9 (32 bit report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (32 bit Chinese:China report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (32 bit WoW report) ===
ntoskrnl.exe: driver.c:599: Test failed: got 0 driver.c:602: Test failed: got 0x102 driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (64 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
Julliard, please ignore/reject this patchset, if it wasn't obvious enough how bad it is 😛
On Fri, Mar 29, 2019 at 2:09 PM Marvin testbot@winehq.org wrote:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=50103
Your paranoid android.
=== debian9 (32 bit report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (32 bit Chinese:China report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (32 bit WoW report) ===
ntoskrnl.exe: driver.c:599: Test failed: got 0 driver.c:602: Test failed: got 0x102 driver.c:799: Test succeeded inside todo block: obj1 != obj2
=== debian9 (64 bit WoW report) ===
ntoskrnl.exe: driver.c:799: Test succeeded inside todo block: obj1 != obj2