mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Rebase against 5bd9d58016236da3142e030add2efbb2789fa2e4.
This commit is contained in:
parent
5ec4d6171e
commit
493ed4662c
@ -78,7 +78,7 @@ for more details.*
|
||||
* Add stubs for d3dx10_43.D3DX10CreateEffectFromFileA/W ([Wine Bug #27739](https://bugs.winehq.org/show_bug.cgi?id=27739))
|
||||
* Add support for CopyFileEx progress callback ([Wine Bug #22692](https://bugs.winehq.org/show_bug.cgi?id=22692))
|
||||
* Add support for GetPropValue to PulseAudio backend
|
||||
* Add support for ThreadQuerySetWin32StartAddress info class ([Wine Bug #8277](https://bugs.winehq.org/show_bug.cgi?id=8277))
|
||||
* ~~Add support for ThreadQuerySetWin32StartAddress info class~~ ([Wine Bug #8277](https://bugs.winehq.org/show_bug.cgi?id=8277))
|
||||
* Add support for hiding wine version information from applications ([Wine Bug #38656](https://bugs.winehq.org/show_bug.cgi?id=38656))
|
||||
* Add support for process specific debug channels
|
||||
* Add wined3d detection for GeForce GT 425M ([Wine Bug #35054](https://bugs.winehq.org/show_bug.cgi?id=35054))
|
||||
@ -96,7 +96,7 @@ for more details.*
|
||||
* Avoid crashing when broken app tries to release surface although refcount is zero ([Wine Bug #18477](https://bugs.winehq.org/show_bug.cgi?id=18477))
|
||||
* Avoid race-conditions in NtReadFile() operations with write watches.
|
||||
* Avoid race-conditions of async WSARecv() operations with write watches.
|
||||
* Avoid race-conditions with long running threadpool tasks
|
||||
* ~~Avoid race-conditions with long running threadpool tasks~~
|
||||
* Avoid race-conditions with write watches in WS2_async_accept.
|
||||
* Avseq crashes when multisampling is enabled ([Wine Bug #31998](https://bugs.winehq.org/show_bug.cgi?id=31998))
|
||||
* Basic handling of write watches triggered while we're on the signal stack.
|
||||
|
7
debian/changelog
vendored
7
debian/changelog
vendored
@ -1,3 +1,10 @@
|
||||
wine-staging (1.7.49) UNRELEASED; urgency=low
|
||||
* Removed patch to avoid race-conditions with long running threadpool tasks
|
||||
(accepted upstream).
|
||||
* Removed patch to add support for ThreadQuerySetWin32StartAddress info class
|
||||
(accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Wed, 29 Jul 2015 22:52:46 +0200
|
||||
|
||||
wine-staging (1.7.48) unstable; urgency=low
|
||||
* Update patches for d3dx9_36.D3DXGetShader{Input,Output}Semantics and add
|
||||
additional tests.
|
||||
|
@ -1,39 +0,0 @@
|
||||
From 85b9819021a4e4b8f31050f5e894eb36b56e8cba Mon Sep 17 00:00:00 2001
|
||||
From: Martin Storsjo <martin@martin.st>
|
||||
Date: Thu, 23 Jul 2015 10:36:06 +0300
|
||||
Subject: ntdll: Handle partial image load config structs. (try 3)
|
||||
|
||||
Some DLLs have a struct that only is large enough to contain the fields
|
||||
that are relevant. Don't require the full struct to be available;
|
||||
only make sure that it is large enough to contain the SecurityCookie
|
||||
field.
|
||||
|
||||
This fixes loading ucrtbase.dll (from the redistributable visual
|
||||
studio 2015 c++ runtime), which requires the security cookie to be
|
||||
initialized. The 32 bit version of this DLL had loadcfg_size == 64,
|
||||
where offsetof(IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie) == 60.
|
||||
That is, SecurityCookie is the last field included in the struct in
|
||||
that case.
|
||||
|
||||
This fixes loading ucrtbase.dll.
|
||||
---
|
||||
dlls/ntdll/virtual.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
|
||||
index ff947da..479ca79 100644
|
||||
--- a/dlls/ntdll/virtual.c
|
||||
+++ b/dlls/ntdll/virtual.c
|
||||
@@ -1320,7 +1320,8 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz
|
||||
|
||||
loadcfg = RtlImageDirectoryEntryToData( (HMODULE)ptr, TRUE,
|
||||
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG, &loadcfg_size );
|
||||
- if (loadcfg && loadcfg_size >= sizeof(*loadcfg))
|
||||
+ if (loadcfg &&
|
||||
+ loadcfg_size >= offsetof(IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie) + sizeof(loadcfg->SecurityCookie))
|
||||
set_security_cookie((ULONG_PTR *)loadcfg->SecurityCookie);
|
||||
|
||||
/* set the image protections */
|
||||
--
|
||||
2.4.5
|
||||
|
@ -1,95 +0,0 @@
|
||||
From e2a835f8bd13694cf23c833548f0f55eabdca09a Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 27 Jul 2015 18:30:53 +0200
|
||||
Subject: server: Use a separate wineserver call to fetch thread times.
|
||||
(resend)
|
||||
|
||||
Changes in v2:
|
||||
* I saw that we already pass the entry point in init_thread() to the wineserver,
|
||||
so no need to change wineserver calls. Patch 2 and 3 have been merged because
|
||||
the code looks much easier now.
|
||||
|
||||
No changes in this patch.
|
||||
---
|
||||
dlls/ntdll/thread.c | 6 ++----
|
||||
server/protocol.def | 11 +++++++++--
|
||||
server/thread.c | 14 +++++++++++++-
|
||||
3 files changed, 24 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index 3696c8e..2781827 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -962,12 +962,10 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class,
|
||||
case ThreadTimes:
|
||||
{
|
||||
KERNEL_USER_TIMES kusrt;
|
||||
- /* We need to do a server call to get the creation time or exit time */
|
||||
- /* This works on any thread */
|
||||
- SERVER_START_REQ( get_thread_info )
|
||||
+
|
||||
+ SERVER_START_REQ( get_thread_times )
|
||||
{
|
||||
req->handle = wine_server_obj_handle( handle );
|
||||
- req->tid_in = 0;
|
||||
status = wine_server_call( req );
|
||||
if (status == STATUS_SUCCESS)
|
||||
{
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 0ff1a6b..3d7f7be 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -842,14 +842,21 @@ struct rawinput_device
|
||||
thread_id_t tid; /* server thread id */
|
||||
client_ptr_t teb; /* thread teb pointer */
|
||||
affinity_t affinity; /* thread affinity mask */
|
||||
- timeout_t creation_time; /* thread creation time */
|
||||
- timeout_t exit_time; /* thread exit time */
|
||||
int exit_code; /* thread exit code */
|
||||
int priority; /* thread priority level */
|
||||
int last; /* last thread in process */
|
||||
@END
|
||||
|
||||
|
||||
+/* Retrieve information about thread times */
|
||||
+@REQ(get_thread_times)
|
||||
+ obj_handle_t handle; /* thread handle */
|
||||
+@REPLY
|
||||
+ timeout_t creation_time; /* thread creation time */
|
||||
+ timeout_t exit_time; /* thread exit time */
|
||||
+@END
|
||||
+
|
||||
+
|
||||
/* Set a thread information */
|
||||
@REQ(set_thread_info)
|
||||
obj_handle_t handle; /* thread handle */
|
||||
diff --git a/server/thread.c b/server/thread.c
|
||||
index 8471651..b8c73c6 100644
|
||||
--- a/server/thread.c
|
||||
+++ b/server/thread.c
|
||||
@@ -1374,9 +1374,21 @@ DECL_HANDLER(get_thread_info)
|
||||
reply->exit_code = (thread->state == TERMINATED) ? thread->exit_code : STATUS_PENDING;
|
||||
reply->priority = thread->priority;
|
||||
reply->affinity = thread->affinity;
|
||||
+ reply->last = thread->process->running_threads == 1;
|
||||
+
|
||||
+ release_object( thread );
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/* fetch information about thread times */
|
||||
+DECL_HANDLER(get_thread_times)
|
||||
+{
|
||||
+ struct thread *thread;
|
||||
+
|
||||
+ if ((thread = get_thread_from_handle( req->handle, THREAD_QUERY_INFORMATION )))
|
||||
+ {
|
||||
reply->creation_time = thread->creation_time;
|
||||
reply->exit_time = thread->exit_time;
|
||||
- reply->last = thread->process->running_threads == 1;
|
||||
|
||||
release_object( thread );
|
||||
}
|
||||
--
|
||||
2.4.5
|
||||
|
@ -1,111 +0,0 @@
|
||||
From 11c840163c21b92b8e67844f18ade51f0f6905e0 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 27 Jul 2015 18:31:11 +0200
|
||||
Subject: ntdll: Implement ThreadQuerySetWin32StartAddress info class in
|
||||
NtSetInformationThread. (v2)
|
||||
|
||||
This implements the pre-Vista version, where the entry point can be changed.
|
||||
---
|
||||
dlls/ntdll/thread.c | 16 ++++++++++++++--
|
||||
server/protocol.def | 8 +++++---
|
||||
server/thread.c | 4 ++++
|
||||
server/thread.h | 1 +
|
||||
4 files changed, 24 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index 2781827..3e95fd4 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -1203,14 +1203,26 @@ NTSTATUS WINAPI NtSetInformationThread( HANDLE handle, THREADINFOCLASS class,
|
||||
case ThreadHideFromDebugger:
|
||||
/* pretend the call succeeded to satisfy some code protectors */
|
||||
return STATUS_SUCCESS;
|
||||
-
|
||||
+ case ThreadQuerySetWin32StartAddress:
|
||||
+ {
|
||||
+ const PRTL_THREAD_START_ROUTINE *entry = data;
|
||||
+ if (length != sizeof(PRTL_THREAD_START_ROUTINE)) return STATUS_INVALID_PARAMETER;
|
||||
+ SERVER_START_REQ( set_thread_info )
|
||||
+ {
|
||||
+ req->handle = wine_server_obj_handle( handle );
|
||||
+ req->mask = SET_THREAD_INFO_ENTRYPOINT;
|
||||
+ req->entry_point = wine_server_client_ptr( *entry );
|
||||
+ status = wine_server_call( req );
|
||||
+ }
|
||||
+ SERVER_END_REQ;
|
||||
+ }
|
||||
+ return status;
|
||||
case ThreadBasicInformation:
|
||||
case ThreadTimes:
|
||||
case ThreadPriority:
|
||||
case ThreadDescriptorTableEntry:
|
||||
case ThreadEnableAlignmentFaultFixup:
|
||||
case ThreadEventPair_Reusable:
|
||||
- case ThreadQuerySetWin32StartAddress:
|
||||
case ThreadPerformanceCount:
|
||||
case ThreadAmILastThread:
|
||||
case ThreadIdealProcessor:
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 3d7f7be..47cedff 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -864,10 +864,12 @@ struct rawinput_device
|
||||
int priority; /* priority class */
|
||||
affinity_t affinity; /* affinity mask */
|
||||
obj_handle_t token; /* impersonation token */
|
||||
+ client_ptr_t entry_point; /* thread entry point */
|
||||
@END
|
||||
-#define SET_THREAD_INFO_PRIORITY 0x01
|
||||
-#define SET_THREAD_INFO_AFFINITY 0x02
|
||||
-#define SET_THREAD_INFO_TOKEN 0x04
|
||||
+#define SET_THREAD_INFO_PRIORITY 0x01
|
||||
+#define SET_THREAD_INFO_AFFINITY 0x02
|
||||
+#define SET_THREAD_INFO_TOKEN 0x04
|
||||
+#define SET_THREAD_INFO_ENTRYPOINT 0x08
|
||||
|
||||
|
||||
/* Retrieve information about a module */
|
||||
diff --git a/server/thread.c b/server/thread.c
|
||||
index b8c73c6..f020908 100644
|
||||
--- a/server/thread.c
|
||||
+++ b/server/thread.c
|
||||
@@ -175,6 +175,7 @@ static inline void init_thread_structure( struct thread *thread )
|
||||
thread->context = NULL;
|
||||
thread->suspend_context = NULL;
|
||||
thread->teb = 0;
|
||||
+ thread->entry_point = 0;
|
||||
thread->debug_ctx = NULL;
|
||||
thread->debug_event = NULL;
|
||||
thread->debug_break = 0;
|
||||
@@ -497,6 +498,8 @@ static void set_thread_info( struct thread *thread,
|
||||
}
|
||||
if (req->mask & SET_THREAD_INFO_TOKEN)
|
||||
security_set_thread_token( thread, req->token );
|
||||
+ if (req->mask & SET_THREAD_INFO_ENTRYPOINT)
|
||||
+ thread->entry_point = req->entry_point;
|
||||
}
|
||||
|
||||
/* stop a thread (at the Unix level) */
|
||||
@@ -1284,6 +1287,7 @@ DECL_HANDLER(init_thread)
|
||||
current->unix_pid = req->unix_pid;
|
||||
current->unix_tid = req->unix_tid;
|
||||
current->teb = req->teb;
|
||||
+ current->entry_point = req->entry;
|
||||
|
||||
if (!process->peb) /* first thread, initialize the process too */
|
||||
{
|
||||
diff --git a/server/thread.h b/server/thread.h
|
||||
index 996d95b..2821991 100644
|
||||
--- a/server/thread.h
|
||||
+++ b/server/thread.h
|
||||
@@ -79,6 +79,7 @@ struct thread
|
||||
context_t *context; /* current context if in an exception handler */
|
||||
context_t *suspend_context; /* current context if suspended */
|
||||
client_ptr_t teb; /* TEB address (in client address space) */
|
||||
+ client_ptr_t entry_point; /* entry point (in client address space) */
|
||||
affinity_t affinity; /* affinity mask */
|
||||
int priority; /* priority level */
|
||||
int suspend; /* suspend count */
|
||||
--
|
||||
2.4.5
|
||||
|
@ -1,74 +0,0 @@
|
||||
From f9566dfc2af3bcef3d3164daaea612ad141b5c33 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 27 Jul 2015 18:31:33 +0200
|
||||
Subject: ntdll: Implement ThreadQuerySetWin32StartAddress info class in
|
||||
NtQueryInformationThread. (resend)
|
||||
|
||||
No changes in this patch.
|
||||
---
|
||||
dlls/ntdll/thread.c | 18 +++++++++++++++++-
|
||||
server/protocol.def | 1 +
|
||||
server/thread.c | 1 +
|
||||
3 files changed, 19 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index 3e95fd4..0a8a7b9 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -1086,12 +1086,28 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class,
|
||||
SERVER_END_REQ;
|
||||
return status;
|
||||
}
|
||||
+ case ThreadQuerySetWin32StartAddress:
|
||||
+ {
|
||||
+ SERVER_START_REQ( get_thread_info )
|
||||
+ {
|
||||
+ req->handle = wine_server_obj_handle( handle );
|
||||
+ req->tid_in = 0;
|
||||
+ status = wine_server_call( req );
|
||||
+ if (status == STATUS_SUCCESS)
|
||||
+ {
|
||||
+ PRTL_THREAD_START_ROUTINE entry = wine_server_get_ptr( reply->entry_point );
|
||||
+ if (data) memcpy( data, &entry, min( length, sizeof(entry) ) );
|
||||
+ if (ret_len) *ret_len = min( length, sizeof(entry) );
|
||||
+ }
|
||||
+ }
|
||||
+ SERVER_END_REQ;
|
||||
+ return status;
|
||||
+ }
|
||||
case ThreadPriority:
|
||||
case ThreadBasePriority:
|
||||
case ThreadImpersonationToken:
|
||||
case ThreadEnableAlignmentFaultFixup:
|
||||
case ThreadEventPair_Reusable:
|
||||
- case ThreadQuerySetWin32StartAddress:
|
||||
case ThreadZeroTlsCell:
|
||||
case ThreadPerformanceCount:
|
||||
case ThreadIdealProcessor:
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 47cedff..3e25e40 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -841,6 +841,7 @@ struct rawinput_device
|
||||
process_id_t pid; /* server process id */
|
||||
thread_id_t tid; /* server thread id */
|
||||
client_ptr_t teb; /* thread teb pointer */
|
||||
+ client_ptr_t entry_point; /* thread entry point */
|
||||
affinity_t affinity; /* thread affinity mask */
|
||||
int exit_code; /* thread exit code */
|
||||
int priority; /* thread priority level */
|
||||
diff --git a/server/thread.c b/server/thread.c
|
||||
index f020908..981bcc1 100644
|
||||
--- a/server/thread.c
|
||||
+++ b/server/thread.c
|
||||
@@ -1375,6 +1375,7 @@ DECL_HANDLER(get_thread_info)
|
||||
reply->pid = get_process_id( thread->process );
|
||||
reply->tid = get_thread_id( thread );
|
||||
reply->teb = thread->teb;
|
||||
+ reply->entry_point = thread->entry_point;
|
||||
reply->exit_code = (thread->state == TERMINATED) ? thread->exit_code : STATUS_PENDING;
|
||||
reply->priority = thread->priority;
|
||||
reply->affinity = thread->affinity;
|
||||
--
|
||||
2.4.5
|
||||
|
@ -1,91 +0,0 @@
|
||||
From 02ac0105e7d1a8142e5773e436424496314993c6 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 27 Jul 2015 18:31:47 +0200
|
||||
Subject: ntdll/tests: Add tests for ThreadQuerySetWin32StartAddress info
|
||||
class. (resend)
|
||||
|
||||
No changes, so the tests should still pass. ;)
|
||||
---
|
||||
dlls/ntdll/tests/info.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 60 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
|
||||
index 5fff490..83e8757 100644
|
||||
--- a/dlls/ntdll/tests/info.c
|
||||
+++ b/dlls/ntdll/tests/info.c
|
||||
@@ -1695,6 +1695,61 @@ static void test_NtGetCurrentProcessorNumber(void)
|
||||
ok(status == STATUS_SUCCESS, "got 0x%x (expected STATUS_SUCCESS)\n", status);
|
||||
}
|
||||
|
||||
+static DWORD WINAPI start_address_thread(void *arg)
|
||||
+{
|
||||
+ PRTL_THREAD_START_ROUTINE entry;
|
||||
+ NTSTATUS status;
|
||||
+ DWORD ret;
|
||||
+
|
||||
+ entry = NULL;
|
||||
+ ret = 0xdeadbeef;
|
||||
+ status = pNtQueryInformationThread(GetCurrentThread(), ThreadQuerySetWin32StartAddress,
|
||||
+ &entry, sizeof(entry), &ret);
|
||||
+ ok(status == STATUS_SUCCESS, "expected STATUS_SUCCESS, got %08x\n", status);
|
||||
+ ok(ret == sizeof(entry), "NtQueryInformationThread returned %u bytes\n", ret);
|
||||
+ ok(entry == (void *)start_address_thread, "expected %p, got %p\n", start_address_thread, entry);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void test_thread_start_address(void)
|
||||
+{
|
||||
+ PRTL_THREAD_START_ROUTINE entry;
|
||||
+ NTSTATUS status;
|
||||
+ HANDLE thread;
|
||||
+ DWORD ret;
|
||||
+
|
||||
+ entry = NULL;
|
||||
+ ret = 0xdeadbeef;
|
||||
+ status = pNtQueryInformationThread(GetCurrentThread(), ThreadQuerySetWin32StartAddress,
|
||||
+ &entry, sizeof(entry), &ret);
|
||||
+ ok(status == STATUS_SUCCESS, "expected STATUS_SUCCESS, got %08x\n", status);
|
||||
+ ok(ret == sizeof(entry), "NtQueryInformationThread returned %u bytes\n", ret);
|
||||
+ ok(entry != NULL, "expected non-NULL entry point\n");
|
||||
+
|
||||
+ entry = (void *)0xdeadbeef;
|
||||
+ status = pNtSetInformationThread(GetCurrentThread(), ThreadQuerySetWin32StartAddress,
|
||||
+ &entry, sizeof(entry));
|
||||
+ ok(status == STATUS_SUCCESS || status == STATUS_INVALID_PARAMETER, /* >= Vista */
|
||||
+ "expected STATUS_SUCCESS or STATUS_INVALID_PARAMETER, got %08x\n", status);
|
||||
+
|
||||
+ if (status == STATUS_SUCCESS)
|
||||
+ {
|
||||
+ entry = NULL;
|
||||
+ ret = 0xdeadbeef;
|
||||
+ status = pNtQueryInformationThread(GetCurrentThread(), ThreadQuerySetWin32StartAddress,
|
||||
+ &entry, sizeof(entry), &ret);
|
||||
+ ok(status == STATUS_SUCCESS, "expected STATUS_SUCCESS, got %08x\n", status);
|
||||
+ ok(ret == sizeof(entry), "NtQueryInformationThread returned %u bytes\n", ret);
|
||||
+ ok(entry == (void *)0xdeadbeef, "expected 0xdeadbeef, got %p\n", entry);
|
||||
+ }
|
||||
+
|
||||
+ thread = CreateThread(NULL, 0, start_address_thread, NULL, 0, NULL);
|
||||
+ ok(thread != INVALID_HANDLE_VALUE, "CreateThread failed with %d\n", GetLastError());
|
||||
+ ret = WaitForSingleObject(thread, 1000);
|
||||
+ ok(ret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", ret);
|
||||
+ CloseHandle(thread);
|
||||
+}
|
||||
+
|
||||
START_TEST(info)
|
||||
{
|
||||
char **argv;
|
||||
@@ -1820,5 +1875,10 @@ START_TEST(info)
|
||||
|
||||
trace("Starting test_affinity()\n");
|
||||
test_affinity();
|
||||
+
|
||||
+ trace("Starting test_NtGetCurrentProcessorNumber()\n");
|
||||
test_NtGetCurrentProcessorNumber();
|
||||
+
|
||||
+ trace("Starting test_thread_start_address()\n");
|
||||
+ test_thread_start_address();
|
||||
}
|
||||
--
|
||||
2.4.5
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [8277] Add support for ThreadQuerySetWin32StartAddress info class
|
@ -1,2 +1 @@
|
||||
Fixes: [20230] Return correct values for GetThreadTimes function
|
||||
Depends: ntdll-ThreadQuerySetWin32StartAddress
|
||||
|
@ -1,66 +0,0 @@
|
||||
From b6b846e842cf3d526dfe7b0a4a3f61a6139ab587 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Wed, 29 Jul 2015 20:57:24 +0200
|
||||
Subject: ntdll: Mark newly spawned worker threads as busy to avoid problems
|
||||
with long-running tasks.
|
||||
|
||||
---
|
||||
dlls/ntdll/threadpool.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c
|
||||
index ad4951f..8605a22 100644
|
||||
--- a/dlls/ntdll/threadpool.c
|
||||
+++ b/dlls/ntdll/threadpool.c
|
||||
@@ -379,6 +379,8 @@ NTSTATUS WINAPI RtlQueueWorkItem( PRTL_WORK_ITEM_ROUTINE function, PVOID context
|
||||
struct rtl_work_item *item;
|
||||
NTSTATUS status;
|
||||
|
||||
+ TRACE( "%p %p %u\n", function, context, flags );
|
||||
+
|
||||
item = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*item) );
|
||||
if (!item)
|
||||
return STATUS_NO_MEMORY;
|
||||
@@ -1716,6 +1718,7 @@ static NTSTATUS tp_threadpool_lock( struct threadpool **out, TP_CALLBACK_ENVIRON
|
||||
{
|
||||
interlocked_inc( &pool->refcount );
|
||||
pool->num_workers++;
|
||||
+ pool->num_busy_workers++;
|
||||
NtClose( thread );
|
||||
}
|
||||
}
|
||||
@@ -1915,6 +1918,7 @@ static void tp_object_submit( struct threadpool_object *object, BOOL signaled )
|
||||
{
|
||||
interlocked_inc( &pool->refcount );
|
||||
pool->num_workers++;
|
||||
+ pool->num_busy_workers++;
|
||||
NtClose( thread );
|
||||
}
|
||||
}
|
||||
@@ -2070,6 +2074,7 @@ static void CALLBACK threadpool_worker_proc( void *param )
|
||||
TRACE( "starting worker thread for pool %p\n", pool );
|
||||
|
||||
RtlEnterCriticalSection( &pool->cs );
|
||||
+ pool->num_busy_workers--;
|
||||
for (;;)
|
||||
{
|
||||
while ((ptr = list_head( &pool->pool )))
|
||||
@@ -2412,6 +2417,7 @@ NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance )
|
||||
{
|
||||
interlocked_inc( &pool->refcount );
|
||||
pool->num_workers++;
|
||||
+ pool->num_busy_workers++;
|
||||
NtClose( thread );
|
||||
}
|
||||
}
|
||||
@@ -2699,6 +2705,7 @@ BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum )
|
||||
|
||||
interlocked_inc( &this->refcount );
|
||||
this->num_workers++;
|
||||
+ this->num_busy_workers++;
|
||||
NtClose( thread );
|
||||
}
|
||||
|
||||
--
|
||||
2.4.5
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: Avoid race-conditions with long running threadpool tasks
|
@ -51,11 +51,11 @@ usage()
|
||||
# Show version information
|
||||
version()
|
||||
{
|
||||
echo "Wine Staging 1.7.48"
|
||||
echo "Wine Staging 1.7.49 (unreleased)"
|
||||
echo "Copyright (C) 2014-2015 the Wine Staging project authors."
|
||||
echo ""
|
||||
echo "Patchset to be applied on upstream Wine:"
|
||||
echo " commit 797c037bff2f7621f5b3d632bd899349529d6b2b"
|
||||
echo " commit 5bd9d58016236da3142e030add2efbb2789fa2e4"
|
||||
echo ""
|
||||
}
|
||||
|
||||
@ -176,10 +176,8 @@ patch_enable_all ()
|
||||
enable_ntdll_Pipe_SpecialCharacters="$1"
|
||||
enable_ntdll_RtlIpStringToAddress="$1"
|
||||
enable_ntdll_Security_Cookie="$1"
|
||||
enable_ntdll_ThreadQuerySetWin32StartAddress="$1"
|
||||
enable_ntdll_ThreadTime="$1"
|
||||
enable_ntdll_Threading="$1"
|
||||
enable_ntdll_Threadpool="$1"
|
||||
enable_ntdll_User_Shared_Data="$1"
|
||||
enable_ntdll_WRITECOPY="$1"
|
||||
enable_ntdll_WinSqm="$1"
|
||||
@ -609,18 +607,12 @@ patch_enable ()
|
||||
ntdll-Security_Cookie)
|
||||
enable_ntdll_Security_Cookie="$2"
|
||||
;;
|
||||
ntdll-ThreadQuerySetWin32StartAddress)
|
||||
enable_ntdll_ThreadQuerySetWin32StartAddress="$2"
|
||||
;;
|
||||
ntdll-ThreadTime)
|
||||
enable_ntdll_ThreadTime="$2"
|
||||
;;
|
||||
ntdll-Threading)
|
||||
enable_ntdll_Threading="$2"
|
||||
;;
|
||||
ntdll-Threadpool)
|
||||
enable_ntdll_Threadpool="$2"
|
||||
;;
|
||||
ntdll-User_Shared_Data)
|
||||
enable_ntdll_User_Shared_Data="$2"
|
||||
;;
|
||||
@ -1756,13 +1748,6 @@ if test "$enable_ntdll_WriteWatches" -eq 1; then
|
||||
enable_ws2_32_WriteWatches=1
|
||||
fi
|
||||
|
||||
if test "$enable_ntdll_ThreadTime" -eq 1; then
|
||||
if test "$enable_ntdll_ThreadQuerySetWin32StartAddress" -gt 1; then
|
||||
abort "Patchset ntdll-ThreadQuerySetWin32StartAddress disabled, but ntdll-ThreadTime depends on that."
|
||||
fi
|
||||
enable_ntdll_ThreadQuerySetWin32StartAddress=1
|
||||
fi
|
||||
|
||||
if test "$enable_ntdll_Junction_Points" -eq 1; then
|
||||
if test "$enable_ntdll_Fix_Free" -gt 1; then
|
||||
abort "Patchset ntdll-Fix_Free disabled, but ntdll-Junction_Points depends on that."
|
||||
@ -2016,23 +2001,6 @@ if test "$enable_Staging" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-Misc_ACL
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#15980] GetSecurityInfo returns NULL DACL for process object
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/tests/security.c, server/process.c, server/security.h, server/token.c
|
||||
# |
|
||||
if test "$enable_server_Misc_ACL" -eq 1; then
|
||||
patch_apply server-Misc_ACL/0001-server-Add-default-security-descriptor-ownership-for.patch
|
||||
patch_apply server-Misc_ACL/0002-server-Add-default-security-descriptor-DACL-for-proc.patch
|
||||
(
|
||||
echo '+ { "Erich E. Hoover", "server: Add default security descriptor ownership for processes.", 1 },';
|
||||
echo '+ { "Erich E. Hoover", "server: Add default security descriptor DACL for processes.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-CreateProcess_ACLs
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -2052,6 +2020,23 @@ if test "$enable_server_CreateProcess_ACLs" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-Misc_ACL
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#15980] GetSecurityInfo returns NULL DACL for process object
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/tests/security.c, server/process.c, server/security.h, server/token.c
|
||||
# |
|
||||
if test "$enable_server_Misc_ACL" -eq 1; then
|
||||
patch_apply server-Misc_ACL/0001-server-Add-default-security-descriptor-ownership-for.patch
|
||||
patch_apply server-Misc_ACL/0002-server-Add-default-security-descriptor-DACL-for-proc.patch
|
||||
(
|
||||
echo '+ { "Erich E. Hoover", "server: Add default security descriptor ownership for processes.", 1 },';
|
||||
echo '+ { "Erich E. Hoover", "server: Add default security descriptor DACL for processes.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset advapi32-LsaLookupSids
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -3740,35 +3725,12 @@ fi
|
||||
# | * dlls/ntdll/virtual.c
|
||||
# |
|
||||
if test "$enable_ntdll_Security_Cookie" -eq 1; then
|
||||
patch_apply ntdll-Security_Cookie/0001-ntdll-Handle-partial-image-load-config-structs.-try-.patch
|
||||
patch_apply ntdll-Security_Cookie/0002-ntdll-Validate-SecurityCookie-pointer-before-derefer.patch
|
||||
patch_apply ntdll-Security_Cookie/0001-ntdll-Validate-SecurityCookie-pointer-before-derefer.patch
|
||||
(
|
||||
echo '+ { "Martin Storsjo", "ntdll: Handle partial image load config structs.", 3 },';
|
||||
echo '+ { "Sebastian Lackner", "ntdll: Validate SecurityCookie pointer before dereferencing.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-ThreadQuerySetWin32StartAddress
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#8277] Add support for ThreadQuerySetWin32StartAddress info class
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/tests/info.c, dlls/ntdll/thread.c, server/protocol.def, server/thread.c, server/thread.h
|
||||
# |
|
||||
if test "$enable_ntdll_ThreadQuerySetWin32StartAddress" -eq 1; then
|
||||
patch_apply ntdll-ThreadQuerySetWin32StartAddress/0001-server-Use-a-separate-wineserver-call-to-fetch-threa.patch
|
||||
patch_apply ntdll-ThreadQuerySetWin32StartAddress/0002-ntdll-Implement-ThreadQuerySetWin32StartAddress-info.patch
|
||||
patch_apply ntdll-ThreadQuerySetWin32StartAddress/0003-ntdll-Implement-ThreadQuerySetWin32StartAddress-info.patch
|
||||
patch_apply ntdll-ThreadQuerySetWin32StartAddress/0004-ntdll-tests-Add-tests-for-ThreadQuerySetWin32StartAd.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "server: Use a separate wineserver call to fetch thread times.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "ntdll: Implement ThreadQuerySetWin32StartAddress info class in NtSetInformationThread.", 2 },';
|
||||
echo '+ { "Sebastian Lackner", "ntdll: Implement ThreadQuerySetWin32StartAddress info class in NtQueryInformationThread.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "ntdll/tests: Add tests for ThreadQuerySetWin32StartAddress info class.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-ThreadTime
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -3796,18 +3758,6 @@ if test "$enable_ntdll_Threading" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-Threadpool
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/threadpool.c
|
||||
# |
|
||||
if test "$enable_ntdll_Threadpool" -eq 1; then
|
||||
patch_apply ntdll-Threadpool/0001-ntdll-Mark-newly-spawned-worker-threads-as-busy-to-a.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "ntdll: Mark newly spawned worker threads as busy to avoid problems with long-running tasks.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-User_Shared_Data
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -4967,18 +4917,15 @@ if test "$enable_wined3d_CSMT_Helper" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Multisampling
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE.
|
||||
# Patchset wined3d-UnhandledBlendFactor
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h
|
||||
# | * dlls/wined3d/state.c
|
||||
# |
|
||||
if test "$enable_wined3d_Multisampling" -eq 1; then
|
||||
patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch
|
||||
if test "$enable_wined3d_UnhandledBlendFactor" -eq 1; then
|
||||
patch_apply wined3d-UnhandledBlendFactor/0001-wined3d-Silence-repeated-Unhandled-blend-factor-0-me.patch
|
||||
(
|
||||
echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated '\''Unhandled blend factor 0'\'' messages.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
@ -5006,6 +4953,48 @@ if test "$enable_wined3d_wined3d_swapchain_present" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Geforce_425M
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#35054] Add wined3d detection for GeForce GT 425M
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_private.h
|
||||
# |
|
||||
if test "$enable_wined3d_Geforce_425M" -eq 1; then
|
||||
patch_apply wined3d-Geforce_425M/0001-wined3d-Add-detection-for-NVIDIA-GeForce-425M.patch
|
||||
(
|
||||
echo '+ { "Jarkko Korpi", "wined3d: Add detection for NVIDIA GeForce 425M.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-MESA_GPU_Info
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_gl.h, dlls/winex11.drv/opengl.c, include/wine/wgl_driver.h
|
||||
# |
|
||||
if test "$enable_wined3d_MESA_GPU_Info" -eq 1; then
|
||||
patch_apply wined3d-MESA_GPU_Info/0001-wined3d-Use-pci-and-memory-information-from-MESA-if-.patch
|
||||
(
|
||||
echo '+ { "Michael Müller", "wined3d: Use pci and memory information from MESA if possible.", 2 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Multisampling
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h
|
||||
# |
|
||||
if test "$enable_wined3d_Multisampling" -eq 1; then
|
||||
patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch
|
||||
(
|
||||
echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Revert_PixelFormat
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -5039,45 +5028,6 @@ if test "$enable_wined3d_Revert_PixelFormat" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-UnhandledBlendFactor
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/state.c
|
||||
# |
|
||||
if test "$enable_wined3d_UnhandledBlendFactor" -eq 1; then
|
||||
patch_apply wined3d-UnhandledBlendFactor/0001-wined3d-Silence-repeated-Unhandled-blend-factor-0-me.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated '\''Unhandled blend factor 0'\'' messages.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Geforce_425M
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#35054] Add wined3d detection for GeForce GT 425M
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_private.h
|
||||
# |
|
||||
if test "$enable_wined3d_Geforce_425M" -eq 1; then
|
||||
patch_apply wined3d-Geforce_425M/0001-wined3d-Add-detection-for-NVIDIA-GeForce-425M.patch
|
||||
(
|
||||
echo '+ { "Jarkko Korpi", "wined3d: Add detection for NVIDIA GeForce 425M.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-MESA_GPU_Info
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_gl.h, dlls/winex11.drv/opengl.c, include/wine/wgl_driver.h
|
||||
# |
|
||||
if test "$enable_wined3d_MESA_GPU_Info" -eq 1; then
|
||||
patch_apply wined3d-MESA_GPU_Info/0001-wined3d-Use-pci-and-memory-information-from-MESA-if-.patch
|
||||
(
|
||||
echo '+ { "Michael Müller", "wined3d: Use pci and memory information from MESA if possible.", 2 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-CSMT_Main
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
|
@ -1738,7 +1738,7 @@ diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
|
||||
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c
|
||||
--- a/dlls/d3d9/tests/visual.c
|
||||
+++ b/dlls/d3d9/tests/visual.c
|
||||
@@ -17301,7 +17301,11 @@
|
||||
@@ -17304,7 +17304,11 @@
|
||||
fill_surface(surface_managed, 0x0000ff00, D3DLOCK_NO_DIRTY_UPDATE);
|
||||
add_dirty_rect_test_draw(device);
|
||||
color = getPixelColor(device, 320, 240);
|
||||
|
Loading…
Reference in New Issue
Block a user