Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
July 2019
- 65 participants
- 633 messages
Re: [PATCH 1/2] winmm: Use condition variable to sleep in timer thread.
by Andrew Eikum
Signed-off-by: Andrew Eikum <aeikum(a)codeweavers.com>
On Tue, Jul 02, 2019 at 08:00:31PM +0200, Jacek Caban wrote:
>
> We have fast condition variable implementation now, so performance should
> not be a problem.
>
> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
> ---
> dlls/winmm/time.c | 81 ++++++++---------------------------------------
> 1 file changed, 14 insertions(+), 67 deletions(-)
>
>
> diff --git a/dlls/winmm/time.c b/dlls/winmm/time.c
> index e055f6bb96..22c89852a2 100644
> --- a/dlls/winmm/time.c
> +++ b/dlls/winmm/time.c
> @@ -20,24 +20,9 @@
> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
> */
>
> -#include "config.h"
> -#include "wine/port.h"
> -
> #include <stdarg.h>
> #include <errno.h>
> #include <time.h>
> -#ifdef HAVE_SYS_TIME_H
> -# include <sys/time.h>
> -#endif
> -#ifdef HAVE_UNISTD_H
> -# include <unistd.h>
> -#endif
> -#ifdef HAVE_POLL_H
> -#include <poll.h>
> -#endif
> -#ifdef HAVE_SYS_POLL_H
> -#include <sys/poll.h>
> -#endif
>
> #include "windef.h"
> #include "winbase.h"
> @@ -74,7 +59,7 @@ static CRITICAL_SECTION TIME_cbcrst = { &critsect_debug, -1, 0, 0, 0, 0 };
>
> static HANDLE TIME_hMMTimer;
> static BOOL TIME_TimeToDie = TRUE;
> -static int TIME_fdWake[2] = { -1, -1 };
> +static CONDITION_VARIABLE TIME_cv;
>
> /* link timer at the appropriate spot in the list */
> static inline void link_timer( WINE_TIMERENTRY *timer )
> @@ -116,8 +101,6 @@ static inline void link_timer( WINE_TIMERENTRY *timer )
> #define MMSYSTIME_MININTERVAL (1)
> #define MMSYSTIME_MAXINTERVAL (65535)
>
> -#ifdef HAVE_POLL
> -
> /**************************************************************************
> * TIME_MMSysTimeCallback
> */
> @@ -195,12 +178,8 @@ static int TIME_MMSysTimeCallback(void)
> */
> static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg)
> {
> - int sleep_time, ret;
> - char readme[16];
> - struct pollfd pfd;
> -
> - pfd.fd = TIME_fdWake[0];
> - pfd.events = POLLIN;
> + int sleep_time;
> + BOOL ret;
>
> TRACE("Starting main winmm thread\n");
>
> @@ -214,20 +193,12 @@ static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg)
> if (sleep_time == 0)
> continue;
>
> - LeaveCriticalSection(&WINMM_cs);
> - ret = poll(&pfd, 1, sleep_time);
> - EnterCriticalSection(&WINMM_cs);
> -
> - if (ret < 0)
> + ret = SleepConditionVariableCS(&TIME_cv, &WINMM_cs, sleep_time);
> + if (!ret && GetLastError() != ERROR_TIMEOUT)
> {
> - if (errno != EINTR && errno != EAGAIN)
> - {
> - ERR("Unexpected error in poll: %s(%d)\n", strerror(errno), errno);
> - break;
> - }
> + ERR("Unexpected error in poll: %s(%d)\n", strerror(errno), errno);
> + break;
> }
> -
> - while (ret > 0) ret = read(TIME_fdWake[0], readme, sizeof(readme));
> }
> CloseHandle(TIME_hMMTimer);
> TIME_hMMTimer = NULL;
> @@ -242,35 +213,15 @@ static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg)
> */
> static void TIME_MMTimeStart(void)
> {
> + HMODULE mod;
> TIME_TimeToDie = 0;
> + if (TIME_hMMTimer) return;
>
> - if (TIME_fdWake[0] < 0) {
> - if (pipe(TIME_fdWake) < 0) {
> - TIME_fdWake[0] = TIME_fdWake[1] = -1;
> - ERR("Cannot create pipe: %s\n", strerror(errno));
> - } else {
> - fcntl(TIME_fdWake[0], F_SETFL, O_NONBLOCK);
> - fcntl(TIME_fdWake[1], F_SETFL, O_NONBLOCK);
> - }
> - }
> -
> - if (!TIME_hMMTimer) {
> - HMODULE mod;
> - GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)TIME_MMSysTimeThread, &mod);
> - TIME_hMMTimer = CreateThread(NULL, 0, TIME_MMSysTimeThread, mod, 0, NULL);
> - SetThreadPriority(TIME_hMMTimer, THREAD_PRIORITY_TIME_CRITICAL);
> - }
> + GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)TIME_MMSysTimeThread, &mod);
> + TIME_hMMTimer = CreateThread(NULL, 0, TIME_MMSysTimeThread, mod, 0, NULL);
> + SetThreadPriority(TIME_hMMTimer, THREAD_PRIORITY_TIME_CRITICAL);
> }
>
> -#else /* HAVE_POLL */
> -
> -static void TIME_MMTimeStart(void)
> -{
> - FIXME( "not starting system thread\n" );
> -}
> -
> -#endif /* HAVE_POLL */
> -
> /**************************************************************************
> * TIME_MMTimeStop
> */
> @@ -282,8 +233,6 @@ void TIME_MMTimeStop(void)
> ERR("Timer still active?!\n");
> CloseHandle(TIME_hMMTimer);
> }
> - close(TIME_fdWake[0]);
> - close(TIME_fdWake[1]);
> DeleteCriticalSection(&TIME_cbcrst);
> }
> }
> @@ -312,7 +261,6 @@ MMRESULT WINAPI timeSetEvent(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc,
> WORD wNewID = 0;
> LPWINE_TIMERENTRY lpNewTimer;
> LPWINE_TIMERENTRY lpTimer;
> - const char c = 'c';
>
> TRACE("(%u, %u, %p, %08lX, %04X);\n", wDelay, wResol, lpFunc, dwUser, wFlags);
>
> @@ -346,7 +294,7 @@ MMRESULT WINAPI timeSetEvent(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc,
> LeaveCriticalSection(&WINMM_cs);
>
> /* Wake the service thread in case there is work to be done */
> - write(TIME_fdWake[1], &c, sizeof(c));
> + WakeConditionVariable(&TIME_cv);
>
> TRACE("=> %u\n", wNewID + 1);
>
> @@ -373,9 +321,8 @@ MMRESULT WINAPI timeKillEvent(UINT wID)
> }
> }
> if (list_empty(&timer_list)) {
> - char c = 'q';
> TIME_TimeToDie = 1;
> - write(TIME_fdWake[1], &c, sizeof(c));
> + WakeConditionVariable(&TIME_cv);
> }
> LeaveCriticalSection(&WINMM_cs);
>
>
>
July 5, 2019
[PATCH 3/3] d3drm: Return error if setting viewport field-of-view to zero or negative value.
by Jeff Smith
Signed-off-by: Jeff Smith <whydoubt(a)gmail.com>
---
dlls/d3drm/tests/d3drm.c | 4 ++++
dlls/d3drm/viewport.c | 3 +++
2 files changed, 7 insertions(+)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 88f3db819d..b8d0cf00d3 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -2157,6 +2157,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
hr = IDirect3DRMViewport_GetDirect3DViewport(viewport, NULL);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
+ hr = IDirect3DRMViewport_SetField(viewport, 0.0);
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
IDirect3DRMViewport_Release(viewport);
ref4 = get_refcount((IUnknown *)d3drm1);
@@ -2249,6 +2251,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
hr = IDirect3DRMViewport2_GetDirect3DViewport(viewport2, NULL);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
+ hr = IDirect3DRMViewport2_SetField(viewport2, 0.0);
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
IDirect3DRMViewport2_Release(viewport2);
ref4 = get_refcount((IUnknown *)d3drm1);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 430c9d470b..c2fa189742 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -523,6 +523,9 @@ static HRESULT WINAPI d3drm_viewport2_SetField(IDirect3DRMViewport2 *iface, D3DV
TRACE("iface %p, field %.8e.\n", iface, field);
+ if (field <= 0.0f)
+ return D3DRMERR_BADVALUE;
+
viewport->field = field;
return D3DRM_OK;
--
2.14.3
July 5, 2019
[PATCH 2/3] d3drm: Check for NULL pointer in d3drm_viewport2_GetDirect3DViewport().
by Jeff Smith
Signed-off-by: Jeff Smith <whydoubt(a)gmail.com>
---
dlls/d3drm/tests/d3drm.c | 4 ++++
dlls/d3drm/viewport.c | 3 +++
2 files changed, 7 insertions(+)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 67696d5583..88f3db819d 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -2155,6 +2155,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport_GetDevice(viewport, NULL);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
+ hr = IDirect3DRMViewport_GetDirect3DViewport(viewport, NULL);
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
IDirect3DRMViewport_Release(viewport);
ref4 = get_refcount((IUnknown *)d3drm1);
@@ -2245,6 +2247,8 @@ static void test_Viewport(void)
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
hr = IDirect3DRMViewport2_GetDevice(viewport2, NULL);
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
+ hr = IDirect3DRMViewport2_GetDirect3DViewport(viewport2, NULL);
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
IDirect3DRMViewport2_Release(viewport2);
ref4 = get_refcount((IUnknown *)d3drm1);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index d049f37213..430c9d470b 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -896,6 +896,9 @@ static HRESULT WINAPI d3drm_viewport2_GetDirect3DViewport(IDirect3DRMViewport2 *
TRACE("iface %p, viewport %p.\n", iface, viewport);
+ if (!viewport)
+ return D3DRMERR_BADVALUE;
+
if (!viewport_object->d3d_viewport)
return D3DRMERR_BADOBJECT;
--
2.14.3
July 5, 2019
[PATCH 1/3] d3drm: Check for NULL pointer in d3drm_viewport2_GetDevice().
by Jeff Smith
Signed-off-by: Jeff Smith <whydoubt(a)gmail.com>
---
dlls/d3drm/tests/d3drm.c | 4 ++++
dlls/d3drm/viewport.c | 6 ++++++
2 files changed, 10 insertions(+)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 86678193ba..67696d5583 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -2153,6 +2153,8 @@ static void test_Viewport(void)
hr = IDirect3DRMViewport_Init(viewport, device1, frame, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
+ hr = IDirect3DRMViewport_GetDevice(viewport, NULL);
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
IDirect3DRMViewport_Release(viewport);
ref4 = get_refcount((IUnknown *)d3drm1);
@@ -2241,6 +2243,8 @@ static void test_Viewport(void)
hr = IDirect3DRMViewport2_Init(viewport2, device3, frame3, rc.left, rc.top, rc.right, rc.bottom);
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
+ hr = IDirect3DRMViewport2_GetDevice(viewport2, NULL);
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
IDirect3DRMViewport2_Release(viewport2);
ref4 = get_refcount((IUnknown *)d3drm1);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 51174cd59e..d049f37213 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -683,6 +683,9 @@ static HRESULT WINAPI d3drm_viewport2_GetDevice(IDirect3DRMViewport2 *iface, IDi
TRACE("iface %p, device %p.\n", iface, device);
+ if (!device)
+ return D3DRMERR_BADVALUE;
+
if (!viewport->device)
return D3DRMERR_BADOBJECT;
@@ -698,6 +701,9 @@ static HRESULT WINAPI d3drm_viewport1_GetDevice(IDirect3DRMViewport *iface, IDir
TRACE("iface %p, device %p.\n\n", iface, device);
+ if (!device)
+ return D3DRMERR_BADVALUE;
+
if (!viewport->device)
return D3DRMERR_BADOBJECT;
--
2.14.3
July 5, 2019
[PATCH] appwiz.cpl: Use use GetFileAttributes in install_from_unix_file.
by Jacek Caban
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/appwiz.cpl/addons.c | 22 +++++++++-------------
1 file changed, 9 insertions(+), 13 deletions(-)
July 5, 2019
[v2 PATCH] winegstreamer: Add stub Video Processor MFT.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
v2: skip tests on failure
dlls/mf/tests/mf.c | 30 ++-
dlls/winegstreamer/Makefile.in | 7 +-
dlls/winegstreamer/gst_private.h | 3 +
dlls/winegstreamer/main.c | 14 +-
dlls/winegstreamer/mfplat.c | 444 +++++++++++++++++++++++++++++++
dlls/winegstreamer/mfplat.idl | 26 ++
6 files changed, 516 insertions(+), 8 deletions(-)
create mode 100644 dlls/winegstreamer/mfplat.c
create mode 100644 dlls/winegstreamer/mfplat.idl
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 15aa58620a..0d66da1392 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -2079,11 +2079,11 @@ static void test_video_processor(void)
hr = CoCreateInstance(&CLSID_VideoProcessorMFT, NULL, CLSCTX_INPROC_SERVER, &IID_IMFTransform,
(void **)&transform);
-todo_wine
- ok(hr == S_OK || broken(hr == REGDB_E_CLASSNOTREG), "Failed to create video processor transform, hr %#x.\n", hr);
-
if (FAILED(hr))
+ {
+ skip("Failed to create Video Processor instance, skipping tests.\n");
goto failed;
+ }
hr = IMFTransform_QueryInterface(transform, &IID_IMFMediaEventGenerator, (void **)&unk);
ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
@@ -2120,12 +2120,14 @@ todo_wine
ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetInputStatus(transform, 0, &flags);
+todo_wine
ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetInputStreamAttributes(transform, 0, &attributes);
ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetOutputStatus(transform, &flags);
+todo_wine
ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetOutputStreamAttributes(transform, 0, &attributes);
@@ -2137,30 +2139,38 @@ todo_wine
IMFAttributes_Release(attributes2);
hr = IMFTransform_GetOutputAvailableType(transform, 0, 0, &media_type);
+todo_wine
ok(hr == MF_E_NO_MORE_TYPES, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetInputCurrentType(transform, 0, &media_type);
+todo_wine
ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetInputCurrentType(transform, 1, &media_type);
+todo_wine
ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetOutputCurrentType(transform, 0, &media_type);
+todo_wine
ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetOutputCurrentType(transform, 1, &media_type);
+todo_wine
ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetInputStreamInfo(transform, 1, &input_info);
+todo_wine
ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#x.\n", hr);
+ memset(&input_info, 0xcc, sizeof(input_info));
hr = IMFTransform_GetInputStreamInfo(transform, 0, &input_info);
+todo_wine {
ok(hr == S_OK, "Failed to get stream info, hr %#x.\n", hr);
ok(input_info.dwFlags == 0, "Unexpected flag %#x.\n", input_info.dwFlags);
ok(input_info.cbSize == 0, "Unexpected size %u.\n", input_info.cbSize);
ok(input_info.cbMaxLookahead == 0, "Unexpected lookahead length %u.\n", input_info.cbMaxLookahead);
ok(input_info.cbAlignment == 0, "Unexpected alignment %u.\n", input_info.cbAlignment);
-
+}
hr = MFCreateMediaEvent(MEUnknown, &GUID_NULL, S_OK, NULL, &event);
ok(hr == S_OK, "Failed to create event object, hr %#x.\n", hr);
hr = IMFTransform_ProcessEvent(transform, 0, event);
@@ -2174,6 +2184,7 @@ todo_wine
{
if (FAILED(hr = IMFTransform_GetInputAvailableType(transform, 0, i, &media_type)))
{
+ todo_wine
ok(hr == MF_E_NO_MORE_TYPES, "Unexpected hr %#x.\n", hr);
break;
}
@@ -2254,17 +2265,22 @@ todo_wine
ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr);
hr = IMFTransform_SetInputType(transform, 0, media_type, 0);
+todo_wine
ok(hr == S_OK, "Failed to set input type, hr %#x.\n", hr);
hr = IMFMediaType_SetGUID(media_type, &MF_MT_SUBTYPE, &MFVideoFormat_RGB32);
ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr);
hr = IMFTransform_SetOutputType(transform, 0, media_type, 0);
+todo_wine
ok(hr == S_OK, "Failed to set output type, hr %#x.\n", hr);
+ memset(&output_info, 0, sizeof(output_info));
hr = IMFTransform_GetOutputStreamInfo(transform, 0, &output_info);
+todo_wine
ok(hr == S_OK, "Failed to get stream info, hr %#x.\n", hr);
ok(output_info.dwFlags == 0, "Unexpected flags %#x.\n", output_info.dwFlags);
+todo_wine
ok(output_info.cbSize > 0, "Unexpected size %u.\n", output_info.cbSize);
ok(output_info.cbAlignment == 0, "Unexpected alignment %u.\n", output_info.cbAlignment);
@@ -2278,20 +2294,24 @@ todo_wine
output_buffer.pSample = sample;
flags = 0;
hr = IMFTransform_ProcessOutput(transform, 0, 1, &output_buffer, &flags);
+todo_wine
ok(hr == MF_E_TRANSFORM_NEED_MORE_INPUT, "Unexpected hr %#x.\n", hr);
ok(output_buffer.dwStatus == 0, "Unexpected buffer status, %#x.\n", output_buffer.dwStatus);
ok(flags == 0, "Unexpected status %#x.\n", flags);
hr = IMFTransform_ProcessInput(transform, 0, sample2, 0);
+todo_wine
ok(hr == S_OK, "Failed to push a sample, hr %#x.\n", hr);
hr = IMFTransform_ProcessInput(transform, 0, sample2, 0);
+todo_wine
ok(hr == MF_E_NOTACCEPTING, "Unexpected hr %#x.\n", hr);
memset(&output_buffer, 0, sizeof(output_buffer));
output_buffer.pSample = sample;
flags = 0;
hr = IMFTransform_ProcessOutput(transform, 0, 1, &output_buffer, &flags);
+todo_wine
ok(hr == MF_E_NO_SAMPLE_TIMESTAMP, "Unexpected hr %#x.\n", hr);
ok(output_buffer.dwStatus == 0, "Unexpected buffer status, %#x.\n", output_buffer.dwStatus);
ok(flags == 0, "Unexpected status %#x.\n", flags);
@@ -2302,6 +2322,7 @@ todo_wine
output_buffer.pSample = sample;
flags = 0;
hr = IMFTransform_ProcessOutput(transform, 0, 1, &output_buffer, &flags);
+todo_wine
ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
ok(output_buffer.dwStatus == 0, "Unexpected buffer status, %#x.\n", output_buffer.dwStatus);
ok(flags == 0, "Unexpected status %#x.\n", flags);
@@ -2319,6 +2340,7 @@ todo_wine
output_buffer.pSample = sample;
flags = 0;
hr = IMFTransform_ProcessOutput(transform, 0, 1, &output_buffer, &flags);
+todo_wine
ok(hr == S_OK || broken(FAILED(hr)) /* Win8 */, "Failed to get output buffer, hr %#x.\n", hr);
ok(output_buffer.dwStatus == 0, "Unexpected buffer status, %#x.\n", output_buffer.dwStatus);
ok(flags == 0, "Unexpected status %#x.\n", flags);
diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in
index fecabe8ba2..437915f6da 100644
--- a/dlls/winegstreamer/Makefile.in
+++ b/dlls/winegstreamer/Makefile.in
@@ -1,5 +1,5 @@
MODULE = winegstreamer.dll
-IMPORTS = strmbase strmiids uuid winmm msacm32 msvfw32 ole32 oleaut32 user32 gdi32 advapi32
+IMPORTS = strmbase strmiids uuid winmm msacm32 msvfw32 ole32 oleaut32 user32 gdi32 advapi32 mfplat mfuuid
EXTRAINCL = $(GSTREAMER_CFLAGS)
EXTRALIBS = $(GSTREAMER_LIBS) $(PTHREAD_LIBS)
@@ -7,7 +7,10 @@ C_SRCS = \
gst_cbs.c \
gstdemux.c \
gsttffilter.c \
- main.c
+ main.c \
+ mfplat.c
+
+IDL_SRCS = mfplat.idl
RC_SRCS = \
rsrc.rc
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index 85659c4bd9..06236e2636 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -53,4 +53,7 @@ void start_dispatch_thread(void) DECLSPEC_HIDDEN;
extern const char *media_quark_string DECLSPEC_HIDDEN;
+extern HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) DECLSPEC_HIDDEN;
+extern HRESULT mfplat_can_unload_now(void) DECLSPEC_HIDDEN;
+
#endif /* __GST_PRIVATE_INCLUDED__ */
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c
index f11e59a914..4419a6fde5 100644
--- a/dlls/winegstreamer/main.c
+++ b/dlls/winegstreamer/main.c
@@ -232,7 +232,12 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
*/
HRESULT WINAPI DllCanUnloadNow(void)
{
- return STRMBASE_DllCanUnloadNow();
+ HRESULT hr = STRMBASE_DllCanUnloadNow();
+
+ if (hr == S_OK)
+ hr = mfplat_can_unload_now();
+
+ return hr;
}
/***********************************************************************
@@ -240,7 +245,12 @@ HRESULT WINAPI DllCanUnloadNow(void)
*/
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
{
- return STRMBASE_DllGetClassObject( rclsid, riid, ppv );
+ HRESULT hr;
+
+ if (FAILED(hr = mfplat_get_class_object(rclsid, riid, ppv)))
+ hr = STRMBASE_DllGetClassObject( rclsid, riid, ppv );
+
+ return hr;
}
/* GStreamer common functions */
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c
new file mode 100644
index 0000000000..2233bbe159
--- /dev/null
+++ b/dlls/winegstreamer/mfplat.c
@@ -0,0 +1,444 @@
+/*
+ * Copyright 2019 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#define COBJMACROS
+#define NONAMELESSUNION
+
+#include "mfapi.h"
+#include "mfidl.h"
+
+#include "wine/debug.h"
+#include "wine/heap.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
+
+static LONG object_locks;
+
+struct video_processor
+{
+ IMFTransform IMFTransform_iface;
+ LONG refcount;
+ IMFAttributes *attributes;
+ IMFAttributes *output_attributes;
+};
+
+static struct video_processor *impl_video_processor_from_IMFTransform(IMFTransform *iface)
+{
+ return CONTAINING_RECORD(iface, struct video_processor, IMFTransform_iface);
+}
+
+static HRESULT WINAPI video_processor_QueryInterface(IMFTransform *iface, REFIID riid, void **obj)
+{
+ TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
+
+ if (IsEqualIID(riid, &IID_IMFTransform) ||
+ IsEqualIID(riid, &IID_IUnknown))
+ {
+ *obj = iface;
+ IMFTransform_AddRef(iface);
+ return S_OK;
+ }
+
+ WARN("Unsupported %s.\n", debugstr_guid(riid));
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI video_processor_AddRef(IMFTransform *iface)
+{
+ struct video_processor *transform = impl_video_processor_from_IMFTransform(iface);
+ ULONG refcount = InterlockedIncrement(&transform->refcount);
+
+ TRACE("%p, refcount %u.\n", iface, refcount);
+
+ return refcount;
+}
+
+static ULONG WINAPI video_processor_Release(IMFTransform *iface)
+{
+ struct video_processor *transform = impl_video_processor_from_IMFTransform(iface);
+ ULONG refcount = InterlockedDecrement(&transform->refcount);
+
+ TRACE("%p, refcount %u.\n", iface, refcount);
+
+ if (!refcount)
+ {
+ if (transform->attributes)
+ IMFAttributes_Release(transform->attributes);
+ if (transform->output_attributes)
+ IMFAttributes_Release(transform->output_attributes);
+ heap_free(transform);
+ }
+
+ return refcount;
+}
+
+static HRESULT WINAPI video_processor_GetStreamLimits(IMFTransform *iface, DWORD *input_minimum, DWORD *input_maximum,
+ DWORD *output_minimum, DWORD *output_maximum)
+{
+ TRACE("%p, %p, %p, %p, %p.\n", iface, input_minimum, input_maximum, output_minimum, output_maximum);
+
+ *input_minimum = *input_maximum = *output_minimum = *output_maximum = 1;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI video_processor_GetStreamCount(IMFTransform *iface, DWORD *inputs, DWORD *outputs)
+{
+ TRACE("%p, %p, %p.\n", iface, inputs, outputs);
+
+ *inputs = *outputs = 1;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI video_processor_GetStreamIDs(IMFTransform *iface, DWORD input_size, DWORD *inputs,
+ DWORD output_size, DWORD *outputs)
+{
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetInputStreamInfo(IMFTransform *iface, DWORD id, MFT_INPUT_STREAM_INFO *info)
+{
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetOutputStreamInfo(IMFTransform *iface, DWORD id, MFT_OUTPUT_STREAM_INFO *info)
+{
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetAttributes(IMFTransform *iface, IMFAttributes **attributes)
+{
+ struct video_processor *transform = impl_video_processor_from_IMFTransform(iface);
+
+ TRACE("%p, %p.\n", iface, attributes);
+
+ *attributes = transform->attributes;
+ IMFAttributes_AddRef(*attributes);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI video_processor_GetInputStreamAttributes(IMFTransform *iface, DWORD id,
+ IMFAttributes **attributes)
+{
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetOutputStreamAttributes(IMFTransform *iface, DWORD id,
+ IMFAttributes **attributes)
+{
+ struct video_processor *transform = impl_video_processor_from_IMFTransform(iface);
+
+ TRACE("%p, %u, %p.\n", iface, id, attributes);
+
+ *attributes = transform->output_attributes;
+ IMFAttributes_AddRef(*attributes);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI video_processor_DeleteInputStream(IMFTransform *iface, DWORD id)
+{
+ TRACE("%p, %u.\n", iface, id);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_AddInputStreams(IMFTransform *iface, DWORD streams, DWORD *ids)
+{
+ TRACE("%p, %u, %p.\n", iface, streams, ids);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetInputAvailableType(IMFTransform *iface, DWORD id, DWORD index,
+ IMFMediaType **type)
+{
+ FIXME("%p, %u, %u, %p.\n", iface, id, index, type);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetOutputAvailableType(IMFTransform *iface, DWORD id, DWORD index,
+ IMFMediaType **type)
+{
+ FIXME("%p, %u, %u, %p.\n", iface, id, index, type);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_SetInputType(IMFTransform *iface, DWORD id, IMFMediaType *type, DWORD flags)
+{
+ FIXME("%p, %u, %p, %#x.\n", iface, id, type, flags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_SetOutputType(IMFTransform *iface, DWORD id, IMFMediaType *type, DWORD flags)
+{
+ FIXME("%p, %u, %p, %#x.\n", iface, id, type, flags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetInputCurrentType(IMFTransform *iface, DWORD id, IMFMediaType **type)
+{
+ FIXME("%p, %u, %p.\n", iface, id, type);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetOutputCurrentType(IMFTransform *iface, DWORD id, IMFMediaType **type)
+{
+ FIXME("%p, %u, %p.\n", iface, id, type);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetInputStatus(IMFTransform *iface, DWORD id, DWORD *flags)
+{
+ FIXME("%p, %u, %p.\n", iface, id, flags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_GetOutputStatus(IMFTransform *iface, DWORD *flags)
+{
+ FIXME("%p, %p.\n", iface, flags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_SetOutputBounds(IMFTransform *iface, LONGLONG lower, LONGLONG upper)
+{
+ FIXME("%p, %s, %s.\n", iface, wine_dbgstr_longlong(lower), wine_dbgstr_longlong(upper));
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_ProcessEvent(IMFTransform *iface, DWORD id, IMFMediaEvent *event)
+{
+ TRACE("%p, %u, %p.\n", iface, id, event);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_ProcessMessage(IMFTransform *iface, MFT_MESSAGE_TYPE message, ULONG_PTR param)
+{
+ FIXME("%p, %u.\n", iface, message);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_ProcessInput(IMFTransform *iface, DWORD id, IMFSample *sample, DWORD flags)
+{
+ FIXME("%p, %u, %p, %#x.\n", iface, id, sample, flags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI video_processor_ProcessOutput(IMFTransform *iface, DWORD flags, DWORD count,
+ MFT_OUTPUT_DATA_BUFFER *samples, DWORD *status)
+{
+ FIXME("%p, %#x, %u, %p, %p.\n", iface, flags, count, samples, status);
+
+ return E_NOTIMPL;
+}
+
+static const IMFTransformVtbl video_processor_vtbl =
+{
+ video_processor_QueryInterface,
+ video_processor_AddRef,
+ video_processor_Release,
+ video_processor_GetStreamLimits,
+ video_processor_GetStreamCount,
+ video_processor_GetStreamIDs,
+ video_processor_GetInputStreamInfo,
+ video_processor_GetOutputStreamInfo,
+ video_processor_GetAttributes,
+ video_processor_GetInputStreamAttributes,
+ video_processor_GetOutputStreamAttributes,
+ video_processor_DeleteInputStream,
+ video_processor_AddInputStreams,
+ video_processor_GetInputAvailableType,
+ video_processor_GetOutputAvailableType,
+ video_processor_SetInputType,
+ video_processor_SetOutputType,
+ video_processor_GetInputCurrentType,
+ video_processor_GetOutputCurrentType,
+ video_processor_GetInputStatus,
+ video_processor_GetOutputStatus,
+ video_processor_SetOutputBounds,
+ video_processor_ProcessEvent,
+ video_processor_ProcessMessage,
+ video_processor_ProcessInput,
+ video_processor_ProcessOutput,
+};
+
+struct class_factory
+{
+ IClassFactory IClassFactory_iface;
+ LONG refcount;
+ HRESULT (*create_instance)(REFIID riid, void **obj);
+};
+
+static struct class_factory *impl_from_IClassFactory(IClassFactory *iface)
+{
+ return CONTAINING_RECORD(iface, struct class_factory, IClassFactory_iface);
+}
+
+static HRESULT WINAPI class_factory_QueryInterface(IClassFactory *iface, REFIID riid, void **obj)
+{
+ TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
+
+ if (IsEqualGUID(riid, &IID_IClassFactory) ||
+ IsEqualGUID(riid, &IID_IUnknown))
+ {
+ *obj = iface;
+ IClassFactory_AddRef(iface);
+ return S_OK;
+ }
+
+ WARN("%s is not supported.\n", debugstr_guid(riid));
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI class_factory_AddRef(IClassFactory *iface)
+{
+ struct class_factory *factory = impl_from_IClassFactory(iface);
+ return InterlockedIncrement(&factory->refcount);
+}
+
+static ULONG WINAPI class_factory_Release(IClassFactory *iface)
+{
+ struct class_factory *factory = impl_from_IClassFactory(iface);
+ ULONG refcount = InterlockedDecrement(&factory->refcount);
+
+ if (!refcount)
+ heap_free(factory);
+
+ return refcount;
+}
+
+static HRESULT WINAPI class_factory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **obj)
+{
+ struct class_factory *factory = impl_from_IClassFactory(iface);
+
+ TRACE("%p, %p, %s, %p.\n", iface, outer, debugstr_guid(riid), obj);
+
+ if (outer)
+ {
+ *obj = NULL;
+ return CLASS_E_NOAGGREGATION;
+ }
+
+ return factory->create_instance(riid, obj);
+}
+
+static HRESULT WINAPI class_factory_LockServer(IClassFactory *iface, BOOL dolock)
+{
+ TRACE("%p, %d.\n", iface, dolock);
+
+ if (dolock)
+ InterlockedIncrement(&object_locks);
+ else
+ InterlockedDecrement(&object_locks);
+
+ return S_OK;
+}
+
+static const IClassFactoryVtbl class_factory_vtbl =
+{
+ class_factory_QueryInterface,
+ class_factory_AddRef,
+ class_factory_Release,
+ class_factory_CreateInstance,
+ class_factory_LockServer,
+};
+
+static HRESULT video_processor_create(REFIID riid, void **ret)
+{
+ struct video_processor *object;
+ HRESULT hr;
+
+ if (!(object = heap_alloc_zero(sizeof(*object))))
+ return E_OUTOFMEMORY;
+
+ object->IMFTransform_iface.lpVtbl = &video_processor_vtbl;
+ object->refcount = 1;
+
+ if (FAILED(hr = MFCreateAttributes(&object->attributes, 0)))
+ goto failed;
+
+ if (FAILED(hr = MFCreateAttributes(&object->output_attributes, 0)))
+ goto failed;
+
+ *ret = &object->IMFTransform_iface;
+ return S_OK;
+
+failed:
+
+ IMFTransform_Release(&object->IMFTransform_iface);
+ return hr;
+}
+
+static const struct class_object
+{
+ const GUID *clsid;
+ HRESULT (*create_instance)(REFIID riid, void **obj);
+}
+class_objects[] =
+{
+ { &CLSID_VideoProcessorMFT, &video_processor_create },
+};
+
+HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj)
+{
+ struct class_factory *factory;
+ unsigned int i;
+ HRESULT hr;
+
+ for (i = 0; i < ARRAY_SIZE(class_objects); ++i)
+ {
+ if (IsEqualGUID(class_objects[i].clsid, rclsid))
+ {
+ if (!(factory = heap_alloc(sizeof(*factory))))
+ return E_OUTOFMEMORY;
+
+ factory->IClassFactory_iface.lpVtbl = &class_factory_vtbl;
+ factory->refcount = 1;
+ factory->create_instance = class_objects[i].create_instance;
+
+ hr = IClassFactory_QueryInterface(&factory->IClassFactory_iface, riid, obj);
+ IClassFactory_Release(&factory->IClassFactory_iface);
+ return hr;
+ }
+ }
+
+ return CLASS_E_CLASSNOTAVAILABLE;
+}
+
+HRESULT mfplat_can_unload_now(void)
+{
+ return !object_locks ? S_OK : S_FALSE;
+}
diff --git a/dlls/winegstreamer/mfplat.idl b/dlls/winegstreamer/mfplat.idl
new file mode 100644
index 0000000000..05a75bdb8e
--- /dev/null
+++ b/dlls/winegstreamer/mfplat.idl
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2019 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#pragma makedep register
+
+[
+ threading(both),
+ uuid(88753b26-5b24-49bd-b2e7-0c445c78c982)
+
+]
+coclass VideoProcessorMFT { }
--
2.20.1
July 5, 2019
Re: [PATCH] server: Rename cpu_type_t to client_cpu_t.
by Marvin
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=54519
Your paranoid android.
=== debian9 (build log) ===
Task: make_requests failed
=== debian9 (build log) ===
Task: make_requests failed
July 5, 2019
Re: [PATCH 4/5] kernel32: Use DebugBreakProcess in DebugActiveProcess.
by Marvin
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=54517
Your paranoid android.
=== debian9 (32 bit Japanese:Japan report) ===
kernel32:
debugger: Timeout
July 5, 2019
[PATCH v2] server: Rename cpu_type_t to client_cpu_t.
by Jacek Caban
To avoid conflicts with mac headers.
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
v2: Includes make_request changes.
dlls/kernel32/process.c | 2 +-
dlls/ntdll/process.c | 2 +-
server/protocol.def | 14 +++++++-------
server/trace.c | 14 +++++++-------
tools/make_requests | 2 +-
5 files changed, 17 insertions(+), 17 deletions(-)
July 5, 2019
Re: [PATCH 3/5] winternl.h: Remove inline DbgBreakPoint version.
by Marvin
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=54516
Your paranoid android.
=== w1064v1507 (32 bit report) ===
kernel32:
debugger.c:143: Test failed: unable to open 'C:\Users\winetest\AppData\Local\Temp\wtFEF6.tmp'
debugger.c:143: Test failed: failed to open: C:\Users\winetest\AppData\Local\Temp\wtFEF6.tmp
debugger.c:546: Test failed: the child and debugged pids don't match: 856 != 2516
=== debian9 (32 bit report) ===
ntdll:
pipe.c:1557: Test failed: pipe is not signaled
pipe.c:1557: Test failed: pipe is not signaled
July 5, 2019