Signed-off-by: Stefan Dösinger <stefan@codeweavers.com
---
The other parts of test_clipper_refcount appear to work fine on the affected system, including the invokation of Release() on a destroyed clipper and destroying the surface that has the destroyed clipper attached to it. --- dlls/ddraw/tests/ddraw1.c | 16 +++++++++++++--- dlls/ddraw/tests/ddraw2.c | 16 +++++++++++++--- dlls/ddraw/tests/ddraw4.c | 16 +++++++++++++--- dlls/ddraw/tests/ddraw7.c | 16 +++++++++++++--- 4 files changed, 52 insertions(+), 12 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index b513121fbbc..61b846fa4a6 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -12908,9 +12908,19 @@ static void test_clipper_refcount(void) IDirectDrawClipper_Release(clipper); IDirectDrawClipper_Release(clipper);
- hr = IDirectDrawSurface_GetClipper(surface, &clipper2); - ok(SUCCEEDED(hr), "Failed to get clipper, hr %#x.\n", hr); - ok(clipper == clipper2, "Got clipper %p, expected %p.\n", clipper2, clipper); + if (0) + { + /* Disabled because it causes heap corruption (HeapValidate fails and random + * hangs in a later HeapFree) on Windows on one of my Machines: MacbookPro 10,1 + * running Windows 10 18363.535 and Nvidia driver 425.31. Driver version 441.66 + * is affected too. + * + * The same Windows and driver versions run the test without heap corruption on + * a Geforce 1060 GTX card. I have not seen the problem on AMD GPUs either. */ + hr = IDirectDrawSurface_GetClipper(surface, &clipper2); + ok(SUCCEEDED(hr), "Failed to get clipper, hr %#x.\n", hr); + ok(clipper == clipper2, "Got clipper %p, expected %p.\n", clipper2, clipper); + }
/* Show that invoking the Release method does not crash, but don't get the * vtable through the clipper pointer because it is no longer pointing to diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 541362c7488..576c8e7df99 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -13734,9 +13734,19 @@ static void test_clipper_refcount(void) IDirectDrawClipper_Release(clipper); IDirectDrawClipper_Release(clipper);
- hr = IDirectDrawSurface_GetClipper(surface, &clipper2); - ok(SUCCEEDED(hr), "Failed to get clipper, hr %#x.\n", hr); - ok(clipper == clipper2, "Got clipper %p, expected %p.\n", clipper2, clipper); + if (0) + { + /* Disabled because it causes heap corruption (HeapValidate fails and random + * hangs in a later HeapFree) on Windows on one of my Machines: MacbookPro 10,1 + * running Windows 10 18363.535 and Nvidia driver 425.31. Driver version 441.66 + * is affected too. + * + * The same Windows and driver versions run the test without heap corruption on + * a Geforce 1060 GTX card. I have not seen the problem on AMD GPUs either. */ + hr = IDirectDrawSurface_GetClipper(surface, &clipper2); + ok(SUCCEEDED(hr), "Failed to get clipper, hr %#x.\n", hr); + ok(clipper == clipper2, "Got clipper %p, expected %p.\n", clipper2, clipper); + }
/* Show that invoking the Release method does not crash, but don't get the * vtable through the clipper pointer because it is no longer pointing to diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 8cadfae52a0..560af41a95c 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -16386,9 +16386,19 @@ static void test_clipper_refcount(void) IDirectDrawClipper_Release(clipper); IDirectDrawClipper_Release(clipper);
- hr = IDirectDrawSurface4_GetClipper(surface, &clipper2); - ok(SUCCEEDED(hr), "Failed to get clipper, hr %#x.\n", hr); - ok(clipper == clipper2, "Got clipper %p, expected %p.\n", clipper2, clipper); + if (0) + { + /* Disabled because it causes heap corruption (HeapValidate fails and random + * hangs in a later HeapFree) on Windows on one of my Machines: MacbookPro 10,1 + * running Windows 10 18363.535 and Nvidia driver 425.31. Driver version 441.66 + * is affected too. + * + * The same Windows and driver versions run the test without heap corruption on + * a Geforce 1060 GTX card. I have not seen the problem on AMD GPUs either. */ + hr = IDirectDrawSurface4_GetClipper(surface, &clipper2); + ok(SUCCEEDED(hr), "Failed to get clipper, hr %#x.\n", hr); + ok(clipper == clipper2, "Got clipper %p, expected %p.\n", clipper2, clipper); + }
/* Show that invoking the Release method does not crash, but don't get the * vtable through the clipper pointer because it is no longer pointing to diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index f4a709711b0..1f9328c45d0 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -16290,9 +16290,19 @@ static void test_clipper_refcount(void) IDirectDrawClipper_Release(clipper); IDirectDrawClipper_Release(clipper);
- hr = IDirectDrawSurface7_GetClipper(surface, &clipper2); - ok(SUCCEEDED(hr), "Failed to get clipper, hr %#x.\n", hr); - ok(clipper == clipper2, "Got clipper %p, expected %p.\n", clipper2, clipper); + if (0) + { + /* Disabled because it causes heap corruption (HeapValidate fails and random + * hangs in a later HeapFree) on Windows on one of my Machines: MacbookPro 10,1 + * running Windows 10 18363.535 and Nvidia driver 425.31. Driver version 441.66 + * is affected too. + * + * The same Windows and driver versions run the test without heap corruption on + * a Geforce 1060 GTX card. I have not seen the problem on AMD GPUs either. */ + hr = IDirectDrawSurface7_GetClipper(surface, &clipper2); + ok(SUCCEEDED(hr), "Failed to get clipper, hr %#x.\n", hr); + ok(clipper == clipper2, "Got clipper %p, expected %p.\n", clipper2, clipper); + }
/* Show that invoking the Release method does not crash, but don't get the * vtable through the clipper pointer because it is no longer pointing to
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=62784
Your paranoid android.
=== w864 (32 bit report) ===
ddraw: ddraw1.c:11108: Test failed: Got unexpected color 0x00ffffff.
=== w1064v1507 (32 bit report) ===
ddraw: 0cac:ddraw4: unhandled exception c0000005 at 730B7F2E
On Fri, 3 Jan 2020 at 02:25, Stefan Dösinger stefan@codeweavers.com wrote:
- if (0)
Should that then be "if (!ddraw_is_nvidia(ddraw))"?
Am 03.01.2020 um 13:00 schrieb Henri Verbeet hverbeet@gmail.com:
On Fri, 3 Jan 2020 at 02:25, Stefan Dösinger stefan@codeweavers.com wrote:
- if (0)
Should that then be "if (!ddraw_is_nvidia(ddraw))"?
I can make it so if you want, but I wouldn't put my hand in a fire that it really is an Nvidia issue and not a random corruption that can affect other systems too, but doesn't in my computer zoo by luck. The part that Deus Ex cares about is that the surface destruction does not crash.
On Sat, 4 Jan 2020 at 00:20, Stefan Dösinger stefandoesinger@gmail.com wrote:
Am 03.01.2020 um 13:00 schrieb Henri Verbeet hverbeet@gmail.com: On Fri, 3 Jan 2020 at 02:25, Stefan Dösinger stefan@codeweavers.com wrote:
- if (0)
Should that then be "if (!ddraw_is_nvidia(ddraw))"?
I can make it so if you want, but I wouldn't put my hand in a fire that it really is an Nvidia issue and not a random corruption that can affect other systems too, but doesn't in my computer zoo by luck. The part that Deus Ex cares about is that the surface destruction does not crash.
Yeah, understood. I'm inclined to go for the narrower option and expand it if that turns out to be necessary, instead of disabling the test right away.