mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
Add patch to implement remaining OpenMP locking functions.
This commit is contained in:
parent
9711296d1f
commit
e95a773114
@ -39,6 +39,11 @@ Wine. All those differences are also documented on the
|
||||
Included bug fixes and improvements
|
||||
-----------------------------------
|
||||
|
||||
**Bug fixes and features included in the next upcoming release [1]:**
|
||||
|
||||
* Implement vcomp locking functions ([Wine Bug #26688](https://bugs.winehq.org/show_bug.cgi?id=26688))
|
||||
|
||||
|
||||
**Bug fixes and features in Wine Staging 1.7.49 [235]:**
|
||||
|
||||
*Note: The following list only contains features and bug fixes which are not
|
||||
|
4
debian/changelog
vendored
4
debian/changelog
vendored
@ -1,3 +1,7 @@
|
||||
wine-staging (1.7.50) UNRELEASED; urgency=low
|
||||
* Add patch to implement remaining OpenMP locking functions.
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Tue, 11 Aug 2015 06:12:14 +0200
|
||||
|
||||
wine-staging (1.7.49) unstable; urgency=low
|
||||
* Added patch to improve stubs for dxgi MakeWindowAssociation and
|
||||
GetWindowAssociation.
|
||||
|
@ -51,7 +51,7 @@ usage()
|
||||
# Show version information
|
||||
version()
|
||||
{
|
||||
echo "Wine Staging 1.7.49"
|
||||
echo "Wine Staging 1.7.50 (unreleased)"
|
||||
echo "Copyright (C) 2014-2015 the Wine Staging project authors."
|
||||
echo ""
|
||||
echo "Patchset to be applied on upstream Wine:"
|
||||
@ -4813,6 +4813,7 @@ fi
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#39058] Implement stub for vcomp._vcomp_flush
|
||||
# | * [#26688] Implement vcomp locking functions
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/vcomp/main.c, dlls/vcomp/tests/vcomp.c, dlls/vcomp/vcomp.spec, dlls/vcomp100/vcomp100.spec,
|
||||
@ -4820,8 +4821,18 @@ fi
|
||||
# |
|
||||
if test "$enable_vcomp_Functions" -eq 1; then
|
||||
patch_apply vcomp-Functions/0001-vcomp-Implement-_vcomp_flush-and-add-tests.patch
|
||||
patch_apply vcomp-Functions/0002-vcomp-Implement-omp_init_lock-and-omp_destroy_lock.patch
|
||||
patch_apply vcomp-Functions/0003-vcomp-Export-omp_init_nest_lock-and-omp_destroy_nest.patch
|
||||
patch_apply vcomp-Functions/0004-vcomp-Implement-OpenMP-nested-locking-functions.patch
|
||||
patch_apply vcomp-Functions/0005-vcomp-Implement-OpenMP-regular-locking-functions.patch
|
||||
patch_apply vcomp-Functions/0006-vcomp-tests-Add-tests-for-function-pointers-of-remai.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "vcomp: Implement _vcomp_flush and add tests.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "vcomp: Implement omp_init_lock and omp_destroy_lock.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "vcomp: Export omp_init_nest_lock and omp_destroy_nest_lock.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "vcomp: Implement OpenMP nested locking functions.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "vcomp: Implement OpenMP regular locking functions.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "vcomp/tests: Add tests for function pointers of remaining lock functions.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
|
@ -0,0 +1,184 @@
|
||||
From 8ae03eb63457887c256bd9ddcc1cc848ab6d0f24 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 11 Aug 2015 05:45:30 +0200
|
||||
Subject: vcomp: Implement omp_init_lock and omp_destroy_lock.
|
||||
|
||||
---
|
||||
dlls/vcomp/main.c | 55 ++++++++++++++++++++++++++++++++-------------
|
||||
dlls/vcomp/vcomp.spec | 4 ++--
|
||||
dlls/vcomp100/vcomp100.spec | 4 ++--
|
||||
dlls/vcomp110/vcomp110.spec | 4 ++--
|
||||
dlls/vcomp90/vcomp90.spec | 4 ++--
|
||||
5 files changed, 47 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c
|
||||
index 0f733a9..0a5e709 100644
|
||||
--- a/dlls/vcomp/main.c
|
||||
+++ b/dlls/vcomp/main.c
|
||||
@@ -34,6 +34,9 @@
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(vcomp);
|
||||
|
||||
+typedef CRITICAL_SECTION *omp_lock_t;
|
||||
+typedef CRITICAL_SECTION *omp_nest_lock_t;
|
||||
+
|
||||
static struct list vcomp_idle_threads = LIST_INIT(vcomp_idle_threads);
|
||||
static DWORD vcomp_context_tls = TLS_OUT_OF_INDEXES;
|
||||
static HMODULE vcomp_module;
|
||||
@@ -985,29 +988,49 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...)
|
||||
__ms_va_end(team_data.valist);
|
||||
}
|
||||
|
||||
+static CRITICAL_SECTION *alloc_critsect(void)
|
||||
+{
|
||||
+ CRITICAL_SECTION *critsect;
|
||||
+ if (!(critsect = HeapAlloc(GetProcessHeap(), 0, sizeof(*critsect))))
|
||||
+ {
|
||||
+ ERR("could not allocate critical section\n");
|
||||
+ ExitProcess(1);
|
||||
+ }
|
||||
+
|
||||
+ InitializeCriticalSection(critsect);
|
||||
+ critsect->DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": critsect");
|
||||
+ return critsect;
|
||||
+}
|
||||
+
|
||||
+static void destroy_critsect(CRITICAL_SECTION *critsect)
|
||||
+{
|
||||
+ if (!critsect) return;
|
||||
+ critsect->DebugInfo->Spare[0] = 0;
|
||||
+ DeleteCriticalSection(critsect);
|
||||
+ HeapFree(GetProcessHeap(), 0, critsect);
|
||||
+}
|
||||
+
|
||||
+void CDECL omp_init_lock(omp_lock_t *lock)
|
||||
+{
|
||||
+ TRACE("(%p)\n", lock);
|
||||
+ *lock = alloc_critsect();
|
||||
+}
|
||||
+
|
||||
+void CDECL omp_destroy_lock(omp_lock_t *lock)
|
||||
+{
|
||||
+ TRACE("(%p)\n", lock);
|
||||
+ destroy_critsect(*lock);
|
||||
+}
|
||||
+
|
||||
void CDECL _vcomp_enter_critsect(CRITICAL_SECTION **critsect)
|
||||
{
|
||||
TRACE("(%p)\n", critsect);
|
||||
|
||||
if (!*critsect)
|
||||
{
|
||||
- CRITICAL_SECTION *new_critsect;
|
||||
- if (!(new_critsect = HeapAlloc(GetProcessHeap(), 0, sizeof(*new_critsect))))
|
||||
- {
|
||||
- ERR("could not allocate critical section\n");
|
||||
- ExitProcess(1);
|
||||
- }
|
||||
-
|
||||
- InitializeCriticalSection(new_critsect);
|
||||
- new_critsect->DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": critsect");
|
||||
-
|
||||
+ CRITICAL_SECTION *new_critsect = alloc_critsect();
|
||||
if (interlocked_cmpxchg_ptr((void **)critsect, new_critsect, NULL) != NULL)
|
||||
- {
|
||||
- /* someone beat us to it */
|
||||
- new_critsect->DebugInfo->Spare[0] = 0;
|
||||
- DeleteCriticalSection(new_critsect);
|
||||
- HeapFree(GetProcessHeap(), 0, new_critsect);
|
||||
- }
|
||||
+ destroy_critsect(new_critsect); /* someone beat us to it */
|
||||
}
|
||||
|
||||
EnterCriticalSection(*critsect);
|
||||
diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec
|
||||
index 40110d2..e078af9 100644
|
||||
--- a/dlls/vcomp/vcomp.spec
|
||||
+++ b/dlls/vcomp/vcomp.spec
|
||||
@@ -88,7 +88,7 @@
|
||||
@ cdecl _vcomp_set_num_threads(long)
|
||||
@ cdecl _vcomp_single_begin(long)
|
||||
@ cdecl _vcomp_single_end()
|
||||
-@ stub omp_destroy_lock
|
||||
+@ cdecl omp_destroy_lock(ptr)
|
||||
@ stub omp_destroy_nest_lock
|
||||
@ cdecl omp_get_dynamic()
|
||||
@ cdecl omp_get_max_threads()
|
||||
@@ -99,7 +99,7 @@
|
||||
@ stub omp_get_wtick
|
||||
@ cdecl omp_get_wtime()
|
||||
@ cdecl omp_in_parallel()
|
||||
-@ stub omp_init_lock
|
||||
+@ cdecl omp_init_lock(ptr)
|
||||
@ stub omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long)
|
||||
@ stub omp_set_lock
|
||||
diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec
|
||||
index 1974f7e..017f49e 100644
|
||||
--- a/dlls/vcomp100/vcomp100.spec
|
||||
+++ b/dlls/vcomp100/vcomp100.spec
|
||||
@@ -88,7 +88,7 @@
|
||||
@ cdecl _vcomp_set_num_threads(long) vcomp._vcomp_set_num_threads
|
||||
@ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin
|
||||
@ cdecl _vcomp_single_end() vcomp._vcomp_single_end
|
||||
-@ stub omp_destroy_lock
|
||||
+@ cdecl omp_destroy_lock(ptr) vcomp.omp_destroy_lock
|
||||
@ stub omp_destroy_nest_lock
|
||||
@ cdecl omp_get_dynamic() vcomp.omp_get_dynamic
|
||||
@ cdecl omp_get_max_threads() vcomp.omp_get_max_threads
|
||||
@@ -99,7 +99,7 @@
|
||||
@ stub omp_get_wtick
|
||||
@ cdecl omp_get_wtime() vcomp.omp_get_wtime
|
||||
@ cdecl omp_in_parallel() vcomp.omp_in_parallel
|
||||
-@ stub omp_init_lock
|
||||
+@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
@ stub omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
diff --git a/dlls/vcomp110/vcomp110.spec b/dlls/vcomp110/vcomp110.spec
|
||||
index d1b27ed..a7be1d9 100644
|
||||
--- a/dlls/vcomp110/vcomp110.spec
|
||||
+++ b/dlls/vcomp110/vcomp110.spec
|
||||
@@ -89,7 +89,7 @@
|
||||
@ cdecl _vcomp_set_num_threads(long) vcomp._vcomp_set_num_threads
|
||||
@ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin
|
||||
@ cdecl _vcomp_single_end() vcomp._vcomp_single_end
|
||||
-@ stub omp_destroy_lock
|
||||
+@ cdecl omp_destroy_lock(ptr) vcomp.omp_destroy_lock
|
||||
@ stub omp_destroy_nest_lock
|
||||
@ cdecl omp_get_dynamic() vcomp.omp_get_dynamic
|
||||
@ cdecl omp_get_max_threads() vcomp.omp_get_max_threads
|
||||
@@ -100,7 +100,7 @@
|
||||
@ stub omp_get_wtick
|
||||
@ cdecl omp_get_wtime() vcomp.omp_get_wtime
|
||||
@ cdecl omp_in_parallel() vcomp.omp_in_parallel
|
||||
-@ stub omp_init_lock
|
||||
+@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
@ stub omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec
|
||||
index 1974f7e..017f49e 100644
|
||||
--- a/dlls/vcomp90/vcomp90.spec
|
||||
+++ b/dlls/vcomp90/vcomp90.spec
|
||||
@@ -88,7 +88,7 @@
|
||||
@ cdecl _vcomp_set_num_threads(long) vcomp._vcomp_set_num_threads
|
||||
@ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin
|
||||
@ cdecl _vcomp_single_end() vcomp._vcomp_single_end
|
||||
-@ stub omp_destroy_lock
|
||||
+@ cdecl omp_destroy_lock(ptr) vcomp.omp_destroy_lock
|
||||
@ stub omp_destroy_nest_lock
|
||||
@ cdecl omp_get_dynamic() vcomp.omp_get_dynamic
|
||||
@ cdecl omp_get_max_threads() vcomp.omp_get_max_threads
|
||||
@@ -99,7 +99,7 @@
|
||||
@ stub omp_get_wtick
|
||||
@ cdecl omp_get_wtime() vcomp.omp_get_wtime
|
||||
@ cdecl omp_in_parallel() vcomp.omp_in_parallel
|
||||
-@ stub omp_init_lock
|
||||
+@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
@ stub omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
--
|
||||
2.5.0
|
||||
|
@ -0,0 +1,175 @@
|
||||
From f63f4cf4b09773743c44b8778687b77bea01ee35 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 11 Aug 2015 06:02:25 +0200
|
||||
Subject: vcomp: Export omp_init_nest_lock and omp_destroy_nest_lock.
|
||||
|
||||
---
|
||||
dlls/vcomp/tests/vcomp.c | 22 ++++++++++++++++++++++
|
||||
dlls/vcomp/vcomp.spec | 4 ++--
|
||||
dlls/vcomp100/vcomp100.spec | 4 ++--
|
||||
dlls/vcomp110/vcomp110.spec | 4 ++--
|
||||
dlls/vcomp90/vcomp90.spec | 4 ++--
|
||||
5 files changed, 30 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/vcomp/tests/vcomp.c b/dlls/vcomp/tests/vcomp.c
|
||||
index 3df547a..ccb6792 100644
|
||||
--- a/dlls/vcomp/tests/vcomp.c
|
||||
+++ b/dlls/vcomp/tests/vcomp.c
|
||||
@@ -31,6 +31,9 @@ static BOOL (WINAPI *pActivateActCtx)(HANDLE, ULONG_PTR*);
|
||||
static BOOL (WINAPI *pDeactivateActCtx)(DWORD, ULONG_PTR);
|
||||
static VOID (WINAPI *pReleaseActCtx)(HANDLE);
|
||||
|
||||
+typedef CRITICAL_SECTION *omp_lock_t;
|
||||
+typedef CRITICAL_SECTION *omp_nest_lock_t;
|
||||
+
|
||||
static void (CDECL *p_vcomp_atomic_add_i4)(int *dest, int val);
|
||||
static void (CDECL *p_vcomp_atomic_add_r4)(float *dest, float val);
|
||||
static void (CDECL *p_vcomp_atomic_add_r8)(double *dest, double val);
|
||||
@@ -70,11 +73,15 @@ static int (CDECL *p_vcomp_sections_next)(void);
|
||||
static void (CDECL *p_vcomp_set_num_threads)(int num_threads);
|
||||
static int (CDECL *p_vcomp_single_begin)(int flags);
|
||||
static void (CDECL *p_vcomp_single_end)(void);
|
||||
+static void (CDECL *pomp_destroy_lock)(omp_lock_t *lock);
|
||||
+static void (CDECL *pomp_destroy_nest_lock)(omp_nest_lock_t *lock);
|
||||
static int (CDECL *pomp_get_max_threads)(void);
|
||||
static int (CDECL *pomp_get_nested)(void);
|
||||
static int (CDECL *pomp_get_num_threads)(void);
|
||||
static int (CDECL *pomp_get_thread_num)(void);
|
||||
static int (CDECL *pomp_in_parallel)(void);
|
||||
+static void (CDECL *pomp_init_lock)(omp_lock_t *lock);
|
||||
+static void (CDECL *pomp_init_nest_lock)(omp_nest_lock_t *lock);
|
||||
static void (CDECL *pomp_set_nested)(int nested);
|
||||
static void (CDECL *pomp_set_num_threads)(int num_threads);
|
||||
|
||||
@@ -245,11 +252,15 @@ static BOOL init_vcomp(void)
|
||||
VCOMP_GET_PROC(_vcomp_set_num_threads);
|
||||
VCOMP_GET_PROC(_vcomp_single_begin);
|
||||
VCOMP_GET_PROC(_vcomp_single_end);
|
||||
+ VCOMP_GET_PROC(omp_destroy_lock);
|
||||
+ VCOMP_GET_PROC(omp_destroy_nest_lock);
|
||||
VCOMP_GET_PROC(omp_get_max_threads);
|
||||
VCOMP_GET_PROC(omp_get_nested);
|
||||
VCOMP_GET_PROC(omp_get_num_threads);
|
||||
VCOMP_GET_PROC(omp_get_thread_num);
|
||||
VCOMP_GET_PROC(omp_in_parallel);
|
||||
+ VCOMP_GET_PROC(omp_init_lock);
|
||||
+ VCOMP_GET_PROC(omp_init_nest_lock);
|
||||
VCOMP_GET_PROC(omp_set_nested);
|
||||
VCOMP_GET_PROC(omp_set_num_threads);
|
||||
|
||||
@@ -1278,6 +1289,16 @@ static void test_vcomp_flush(void)
|
||||
p_vcomp_flush();
|
||||
}
|
||||
|
||||
+static void test_omp_init_nest_lock(void)
|
||||
+{
|
||||
+ ok(pomp_init_lock == pomp_init_nest_lock,
|
||||
+ "expected omp_init_lock == omp_init_nest_lock, got %p and %p\n",
|
||||
+ pomp_init_lock, pomp_init_nest_lock);
|
||||
+ ok(pomp_destroy_lock == pomp_destroy_nest_lock,
|
||||
+ "expected omp_destroy_lock == omp_destroy_nest_lock, got %p and %p\n",
|
||||
+ pomp_destroy_lock, pomp_destroy_nest_lock);
|
||||
+}
|
||||
+
|
||||
static void test_atomic_integer32(void)
|
||||
{
|
||||
struct
|
||||
@@ -1398,6 +1419,7 @@ START_TEST(vcomp)
|
||||
test_vcomp_single_begin();
|
||||
test_vcomp_enter_critsect();
|
||||
test_vcomp_flush();
|
||||
+ test_omp_init_nest_lock();
|
||||
test_atomic_integer32();
|
||||
test_atomic_float();
|
||||
test_atomic_double();
|
||||
diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec
|
||||
index e078af9..418d176 100644
|
||||
--- a/dlls/vcomp/vcomp.spec
|
||||
+++ b/dlls/vcomp/vcomp.spec
|
||||
@@ -89,7 +89,7 @@
|
||||
@ cdecl _vcomp_single_begin(long)
|
||||
@ cdecl _vcomp_single_end()
|
||||
@ cdecl omp_destroy_lock(ptr)
|
||||
-@ stub omp_destroy_nest_lock
|
||||
+@ cdecl omp_destroy_nest_lock(ptr) omp_destroy_lock
|
||||
@ cdecl omp_get_dynamic()
|
||||
@ cdecl omp_get_max_threads()
|
||||
@ cdecl omp_get_nested()
|
||||
@@ -100,7 +100,7 @@
|
||||
@ cdecl omp_get_wtime()
|
||||
@ cdecl omp_in_parallel()
|
||||
@ cdecl omp_init_lock(ptr)
|
||||
-@ stub omp_init_nest_lock
|
||||
+@ cdecl omp_init_nest_lock(ptr) omp_init_lock
|
||||
@ cdecl omp_set_dynamic(long)
|
||||
@ stub omp_set_lock
|
||||
@ stub omp_set_nest_lock
|
||||
diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec
|
||||
index 017f49e..8a26b15 100644
|
||||
--- a/dlls/vcomp100/vcomp100.spec
|
||||
+++ b/dlls/vcomp100/vcomp100.spec
|
||||
@@ -89,7 +89,7 @@
|
||||
@ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin
|
||||
@ cdecl _vcomp_single_end() vcomp._vcomp_single_end
|
||||
@ cdecl omp_destroy_lock(ptr) vcomp.omp_destroy_lock
|
||||
-@ stub omp_destroy_nest_lock
|
||||
+@ cdecl omp_destroy_nest_lock(ptr) vcomp.omp_destroy_nest_lock
|
||||
@ cdecl omp_get_dynamic() vcomp.omp_get_dynamic
|
||||
@ cdecl omp_get_max_threads() vcomp.omp_get_max_threads
|
||||
@ cdecl omp_get_nested() vcomp.omp_get_nested
|
||||
@@ -100,7 +100,7 @@
|
||||
@ cdecl omp_get_wtime() vcomp.omp_get_wtime
|
||||
@ cdecl omp_in_parallel() vcomp.omp_in_parallel
|
||||
@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
-@ stub omp_init_nest_lock
|
||||
+@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
@ stub omp_set_nest_lock
|
||||
diff --git a/dlls/vcomp110/vcomp110.spec b/dlls/vcomp110/vcomp110.spec
|
||||
index a7be1d9..64a4016 100644
|
||||
--- a/dlls/vcomp110/vcomp110.spec
|
||||
+++ b/dlls/vcomp110/vcomp110.spec
|
||||
@@ -90,7 +90,7 @@
|
||||
@ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin
|
||||
@ cdecl _vcomp_single_end() vcomp._vcomp_single_end
|
||||
@ cdecl omp_destroy_lock(ptr) vcomp.omp_destroy_lock
|
||||
-@ stub omp_destroy_nest_lock
|
||||
+@ cdecl omp_destroy_nest_lock(ptr) vcomp.omp_destroy_nest_lock
|
||||
@ cdecl omp_get_dynamic() vcomp.omp_get_dynamic
|
||||
@ cdecl omp_get_max_threads() vcomp.omp_get_max_threads
|
||||
@ cdecl omp_get_nested() vcomp.omp_get_nested
|
||||
@@ -101,7 +101,7 @@
|
||||
@ cdecl omp_get_wtime() vcomp.omp_get_wtime
|
||||
@ cdecl omp_in_parallel() vcomp.omp_in_parallel
|
||||
@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
-@ stub omp_init_nest_lock
|
||||
+@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
@ stub omp_set_nest_lock
|
||||
diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec
|
||||
index 017f49e..8a26b15 100644
|
||||
--- a/dlls/vcomp90/vcomp90.spec
|
||||
+++ b/dlls/vcomp90/vcomp90.spec
|
||||
@@ -89,7 +89,7 @@
|
||||
@ cdecl _vcomp_single_begin(long) vcomp._vcomp_single_begin
|
||||
@ cdecl _vcomp_single_end() vcomp._vcomp_single_end
|
||||
@ cdecl omp_destroy_lock(ptr) vcomp.omp_destroy_lock
|
||||
-@ stub omp_destroy_nest_lock
|
||||
+@ cdecl omp_destroy_nest_lock(ptr) vcomp.omp_destroy_nest_lock
|
||||
@ cdecl omp_get_dynamic() vcomp.omp_get_dynamic
|
||||
@ cdecl omp_get_max_threads() vcomp.omp_get_max_threads
|
||||
@ cdecl omp_get_nested() vcomp.omp_get_nested
|
||||
@@ -100,7 +100,7 @@
|
||||
@ cdecl omp_get_wtime() vcomp.omp_get_wtime
|
||||
@ cdecl omp_in_parallel() vcomp.omp_in_parallel
|
||||
@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
-@ stub omp_init_nest_lock
|
||||
+@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
@ stub omp_set_nest_lock
|
||||
--
|
||||
2.5.0
|
||||
|
@ -0,0 +1,117 @@
|
||||
From 3f0b8509cf0b7c720b853046f391c6f3f0b9ed94 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 11 Aug 2015 06:06:39 +0200
|
||||
Subject: vcomp: Implement OpenMP nested locking functions.
|
||||
|
||||
---
|
||||
dlls/vcomp/main.c | 18 ++++++++++++++++++
|
||||
dlls/vcomp/vcomp.spec | 6 +++---
|
||||
dlls/vcomp100/vcomp100.spec | 6 +++---
|
||||
dlls/vcomp110/vcomp110.spec | 6 +++---
|
||||
dlls/vcomp90/vcomp90.spec | 6 +++---
|
||||
5 files changed, 30 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c
|
||||
index 0a5e709..a110c11 100644
|
||||
--- a/dlls/vcomp/main.c
|
||||
+++ b/dlls/vcomp/main.c
|
||||
@@ -1022,6 +1022,24 @@ void CDECL omp_destroy_lock(omp_lock_t *lock)
|
||||
destroy_critsect(*lock);
|
||||
}
|
||||
|
||||
+void CDECL omp_set_nest_lock(omp_nest_lock_t *lock)
|
||||
+{
|
||||
+ TRACE("(%p)\n", lock);
|
||||
+ EnterCriticalSection(*lock);
|
||||
+}
|
||||
+
|
||||
+void CDECL omp_unset_nest_lock(omp_nest_lock_t *lock)
|
||||
+{
|
||||
+ TRACE("(%p)\n", lock);
|
||||
+ LeaveCriticalSection(*lock);
|
||||
+}
|
||||
+
|
||||
+int CDECL omp_test_nest_lock(omp_nest_lock_t *lock)
|
||||
+{
|
||||
+ TRACE("(%p)\n", lock);
|
||||
+ return TryEnterCriticalSection(*lock);
|
||||
+}
|
||||
+
|
||||
void CDECL _vcomp_enter_critsect(CRITICAL_SECTION **critsect)
|
||||
{
|
||||
TRACE("(%p)\n", critsect);
|
||||
diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec
|
||||
index 418d176..4c89879 100644
|
||||
--- a/dlls/vcomp/vcomp.spec
|
||||
+++ b/dlls/vcomp/vcomp.spec
|
||||
@@ -103,10 +103,10 @@
|
||||
@ cdecl omp_init_nest_lock(ptr) omp_init_lock
|
||||
@ cdecl omp_set_dynamic(long)
|
||||
@ stub omp_set_lock
|
||||
-@ stub omp_set_nest_lock
|
||||
+@ cdecl omp_set_nest_lock(ptr)
|
||||
@ cdecl omp_set_nested(long)
|
||||
@ cdecl omp_set_num_threads(long)
|
||||
@ stub omp_test_lock
|
||||
-@ stub omp_test_nest_lock
|
||||
+@ cdecl omp_test_nest_lock(ptr)
|
||||
@ stub omp_unset_lock
|
||||
-@ stub omp_unset_nest_lock
|
||||
+@ cdecl omp_unset_nest_lock(ptr)
|
||||
diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec
|
||||
index 8a26b15..9021b10 100644
|
||||
--- a/dlls/vcomp100/vcomp100.spec
|
||||
+++ b/dlls/vcomp100/vcomp100.spec
|
||||
@@ -103,10 +103,10 @@
|
||||
@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
-@ stub omp_set_nest_lock
|
||||
+@ cdecl omp_set_nest_lock(ptr) vcomp.omp_set_nest_lock
|
||||
@ cdecl omp_set_nested(long) vcomp.omp_set_nested
|
||||
@ cdecl omp_set_num_threads(long) vcomp.omp_set_num_threads
|
||||
@ stub omp_test_lock
|
||||
-@ stub omp_test_nest_lock
|
||||
+@ cdecl omp_test_nest_lock(ptr) vcomp.omp_test_nest_lock
|
||||
@ stub omp_unset_lock
|
||||
-@ stub omp_unset_nest_lock
|
||||
+@ cdecl omp_unset_nest_lock(ptr) vcomp.omp_unset_nest_lock
|
||||
diff --git a/dlls/vcomp110/vcomp110.spec b/dlls/vcomp110/vcomp110.spec
|
||||
index 64a4016..4f7503f 100644
|
||||
--- a/dlls/vcomp110/vcomp110.spec
|
||||
+++ b/dlls/vcomp110/vcomp110.spec
|
||||
@@ -104,10 +104,10 @@
|
||||
@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
-@ stub omp_set_nest_lock
|
||||
+@ cdecl omp_set_nest_lock(ptr) vcomp.omp_set_nest_lock
|
||||
@ cdecl omp_set_nested(long) vcomp.omp_set_nested
|
||||
@ cdecl omp_set_num_threads(long) vcomp.omp_set_num_threads
|
||||
@ stub omp_test_lock
|
||||
-@ stub omp_test_nest_lock
|
||||
+@ cdecl omp_test_nest_lock(ptr) vcomp.omp_test_nest_lock
|
||||
@ stub omp_unset_lock
|
||||
-@ stub omp_unset_nest_lock
|
||||
+@ cdecl omp_unset_nest_lock(ptr) vcomp.omp_unset_nest_lock
|
||||
diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec
|
||||
index 8a26b15..9021b10 100644
|
||||
--- a/dlls/vcomp90/vcomp90.spec
|
||||
+++ b/dlls/vcomp90/vcomp90.spec
|
||||
@@ -103,10 +103,10 @@
|
||||
@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
@ stub omp_set_lock
|
||||
-@ stub omp_set_nest_lock
|
||||
+@ cdecl omp_set_nest_lock(ptr) vcomp.omp_set_nest_lock
|
||||
@ cdecl omp_set_nested(long) vcomp.omp_set_nested
|
||||
@ cdecl omp_set_num_threads(long) vcomp.omp_set_num_threads
|
||||
@ stub omp_test_lock
|
||||
-@ stub omp_test_nest_lock
|
||||
+@ cdecl omp_test_nest_lock(ptr) vcomp.omp_test_nest_lock
|
||||
@ stub omp_unset_lock
|
||||
-@ stub omp_unset_nest_lock
|
||||
+@ cdecl omp_unset_nest_lock(ptr) vcomp.omp_unset_nest_lock
|
||||
--
|
||||
2.5.0
|
||||
|
@ -0,0 +1,145 @@
|
||||
From 78df40d0132f693de1ccae95f91a411ff8ce30dc Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 11 Aug 2015 06:08:34 +0200
|
||||
Subject: vcomp: Implement OpenMP regular locking functions.
|
||||
|
||||
---
|
||||
dlls/vcomp/main.c | 35 +++++++++++++++++++++++++++++++++++
|
||||
dlls/vcomp/vcomp.spec | 6 +++---
|
||||
dlls/vcomp100/vcomp100.spec | 6 +++---
|
||||
dlls/vcomp110/vcomp110.spec | 6 +++---
|
||||
dlls/vcomp90/vcomp90.spec | 6 +++---
|
||||
5 files changed, 47 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c
|
||||
index a110c11..8a87f47 100644
|
||||
--- a/dlls/vcomp/main.c
|
||||
+++ b/dlls/vcomp/main.c
|
||||
@@ -1010,6 +1010,12 @@ static void destroy_critsect(CRITICAL_SECTION *critsect)
|
||||
HeapFree(GetProcessHeap(), 0, critsect);
|
||||
}
|
||||
|
||||
+static BOOL critsect_is_owned(CRITICAL_SECTION *critsect)
|
||||
+{
|
||||
+ return critsect->OwningThread == ULongToHandle(GetCurrentThreadId()) &&
|
||||
+ critsect->RecursionCount;
|
||||
+}
|
||||
+
|
||||
void CDECL omp_init_lock(omp_lock_t *lock)
|
||||
{
|
||||
TRACE("(%p)\n", lock);
|
||||
@@ -1022,6 +1028,35 @@ void CDECL omp_destroy_lock(omp_lock_t *lock)
|
||||
destroy_critsect(*lock);
|
||||
}
|
||||
|
||||
+void CDECL omp_set_lock(omp_lock_t *lock)
|
||||
+{
|
||||
+ TRACE("(%p)\n", lock);
|
||||
+
|
||||
+ if (critsect_is_owned(*lock))
|
||||
+ {
|
||||
+ ERR("omp_set_lock called while holding lock %p\n", *lock);
|
||||
+ ExitProcess(1);
|
||||
+ }
|
||||
+
|
||||
+ EnterCriticalSection(*lock);
|
||||
+}
|
||||
+
|
||||
+void CDECL omp_unset_lock(omp_lock_t *lock)
|
||||
+{
|
||||
+ TRACE("(%p)\n", lock);
|
||||
+ LeaveCriticalSection(*lock);
|
||||
+}
|
||||
+
|
||||
+int CDECL omp_test_lock(omp_lock_t *lock)
|
||||
+{
|
||||
+ TRACE("(%p)\n", lock);
|
||||
+
|
||||
+ if (critsect_is_owned(*lock))
|
||||
+ return 0;
|
||||
+
|
||||
+ return TryEnterCriticalSection(*lock);
|
||||
+}
|
||||
+
|
||||
void CDECL omp_set_nest_lock(omp_nest_lock_t *lock)
|
||||
{
|
||||
TRACE("(%p)\n", lock);
|
||||
diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec
|
||||
index 4c89879..52b929f 100644
|
||||
--- a/dlls/vcomp/vcomp.spec
|
||||
+++ b/dlls/vcomp/vcomp.spec
|
||||
@@ -102,11 +102,11 @@
|
||||
@ cdecl omp_init_lock(ptr)
|
||||
@ cdecl omp_init_nest_lock(ptr) omp_init_lock
|
||||
@ cdecl omp_set_dynamic(long)
|
||||
-@ stub omp_set_lock
|
||||
+@ cdecl omp_set_lock(ptr)
|
||||
@ cdecl omp_set_nest_lock(ptr)
|
||||
@ cdecl omp_set_nested(long)
|
||||
@ cdecl omp_set_num_threads(long)
|
||||
-@ stub omp_test_lock
|
||||
+@ cdecl omp_test_lock(ptr)
|
||||
@ cdecl omp_test_nest_lock(ptr)
|
||||
-@ stub omp_unset_lock
|
||||
+@ cdecl omp_unset_lock(ptr)
|
||||
@ cdecl omp_unset_nest_lock(ptr)
|
||||
diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec
|
||||
index 9021b10..4b646eb 100644
|
||||
--- a/dlls/vcomp100/vcomp100.spec
|
||||
+++ b/dlls/vcomp100/vcomp100.spec
|
||||
@@ -102,11 +102,11 @@
|
||||
@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
-@ stub omp_set_lock
|
||||
+@ cdecl omp_set_lock(ptr) vcomp.omp_set_lock
|
||||
@ cdecl omp_set_nest_lock(ptr) vcomp.omp_set_nest_lock
|
||||
@ cdecl omp_set_nested(long) vcomp.omp_set_nested
|
||||
@ cdecl omp_set_num_threads(long) vcomp.omp_set_num_threads
|
||||
-@ stub omp_test_lock
|
||||
+@ cdecl omp_test_lock(ptr) vcomp.omp_test_lock
|
||||
@ cdecl omp_test_nest_lock(ptr) vcomp.omp_test_nest_lock
|
||||
-@ stub omp_unset_lock
|
||||
+@ cdecl omp_unset_lock(ptr) vcomp.omp_unset_lock
|
||||
@ cdecl omp_unset_nest_lock(ptr) vcomp.omp_unset_nest_lock
|
||||
diff --git a/dlls/vcomp110/vcomp110.spec b/dlls/vcomp110/vcomp110.spec
|
||||
index 4f7503f..1ee7fba 100644
|
||||
--- a/dlls/vcomp110/vcomp110.spec
|
||||
+++ b/dlls/vcomp110/vcomp110.spec
|
||||
@@ -103,11 +103,11 @@
|
||||
@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
-@ stub omp_set_lock
|
||||
+@ cdecl omp_set_lock(ptr) vcomp.omp_set_lock
|
||||
@ cdecl omp_set_nest_lock(ptr) vcomp.omp_set_nest_lock
|
||||
@ cdecl omp_set_nested(long) vcomp.omp_set_nested
|
||||
@ cdecl omp_set_num_threads(long) vcomp.omp_set_num_threads
|
||||
-@ stub omp_test_lock
|
||||
+@ cdecl omp_test_lock(ptr) vcomp.omp_test_lock
|
||||
@ cdecl omp_test_nest_lock(ptr) vcomp.omp_test_nest_lock
|
||||
-@ stub omp_unset_lock
|
||||
+@ cdecl omp_unset_lock(ptr) vcomp.omp_unset_lock
|
||||
@ cdecl omp_unset_nest_lock(ptr) vcomp.omp_unset_nest_lock
|
||||
diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec
|
||||
index 9021b10..4b646eb 100644
|
||||
--- a/dlls/vcomp90/vcomp90.spec
|
||||
+++ b/dlls/vcomp90/vcomp90.spec
|
||||
@@ -102,11 +102,11 @@
|
||||
@ cdecl omp_init_lock(ptr) vcomp.omp_init_lock
|
||||
@ cdecl omp_init_nest_lock(ptr) vcomp.omp_init_nest_lock
|
||||
@ cdecl omp_set_dynamic(long) vcomp.omp_set_dynamic
|
||||
-@ stub omp_set_lock
|
||||
+@ cdecl omp_set_lock(ptr) vcomp.omp_set_lock
|
||||
@ cdecl omp_set_nest_lock(ptr) vcomp.omp_set_nest_lock
|
||||
@ cdecl omp_set_nested(long) vcomp.omp_set_nested
|
||||
@ cdecl omp_set_num_threads(long) vcomp.omp_set_num_threads
|
||||
-@ stub omp_test_lock
|
||||
+@ cdecl omp_test_lock(ptr) vcomp.omp_test_lock
|
||||
@ cdecl omp_test_nest_lock(ptr) vcomp.omp_test_nest_lock
|
||||
-@ stub omp_unset_lock
|
||||
+@ cdecl omp_unset_lock(ptr) vcomp.omp_unset_lock
|
||||
@ cdecl omp_unset_nest_lock(ptr) vcomp.omp_unset_nest_lock
|
||||
--
|
||||
2.5.0
|
||||
|
@ -0,0 +1,64 @@
|
||||
From 2f46b96355314dfe76d6baea838f3f57b0890346 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 11 Aug 2015 06:10:50 +0200
|
||||
Subject: vcomp/tests: Add tests for function pointers of remaining lock
|
||||
functions.
|
||||
|
||||
---
|
||||
dlls/vcomp/tests/vcomp.c | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/dlls/vcomp/tests/vcomp.c b/dlls/vcomp/tests/vcomp.c
|
||||
index ccb6792..821a552 100644
|
||||
--- a/dlls/vcomp/tests/vcomp.c
|
||||
+++ b/dlls/vcomp/tests/vcomp.c
|
||||
@@ -82,8 +82,14 @@ static int (CDECL *pomp_get_thread_num)(void);
|
||||
static int (CDECL *pomp_in_parallel)(void);
|
||||
static void (CDECL *pomp_init_lock)(omp_lock_t *lock);
|
||||
static void (CDECL *pomp_init_nest_lock)(omp_nest_lock_t *lock);
|
||||
+static void (CDECL *pomp_set_lock)(omp_lock_t *lock);
|
||||
+static void (CDECL *pomp_set_nest_lock)(omp_nest_lock_t *lock);
|
||||
static void (CDECL *pomp_set_nested)(int nested);
|
||||
static void (CDECL *pomp_set_num_threads)(int num_threads);
|
||||
+static int (CDECL *pomp_test_lock)(omp_lock_t *lock);
|
||||
+static int (CDECL *pomp_test_nest_lock)(omp_nest_lock_t *lock);
|
||||
+static void (CDECL *pomp_unset_lock)(omp_lock_t *lock);
|
||||
+static void (CDECL *pomp_unset_nest_lock)(omp_nest_lock_t *lock);
|
||||
|
||||
#define VCOMP_DYNAMIC_FLAGS_STATIC 0x01
|
||||
#define VCOMP_DYNAMIC_FLAGS_CHUNKED 0x02
|
||||
@@ -261,8 +267,14 @@ static BOOL init_vcomp(void)
|
||||
VCOMP_GET_PROC(omp_in_parallel);
|
||||
VCOMP_GET_PROC(omp_init_lock);
|
||||
VCOMP_GET_PROC(omp_init_nest_lock);
|
||||
+ VCOMP_GET_PROC(omp_set_lock);
|
||||
+ VCOMP_GET_PROC(omp_set_nest_lock);
|
||||
VCOMP_GET_PROC(omp_set_nested);
|
||||
VCOMP_GET_PROC(omp_set_num_threads);
|
||||
+ VCOMP_GET_PROC(omp_test_lock);
|
||||
+ VCOMP_GET_PROC(omp_test_nest_lock);
|
||||
+ VCOMP_GET_PROC(omp_unset_lock);
|
||||
+ VCOMP_GET_PROC(omp_unset_nest_lock);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1297,6 +1309,16 @@ static void test_omp_init_nest_lock(void)
|
||||
ok(pomp_destroy_lock == pomp_destroy_nest_lock,
|
||||
"expected omp_destroy_lock == omp_destroy_nest_lock, got %p and %p\n",
|
||||
pomp_destroy_lock, pomp_destroy_nest_lock);
|
||||
+
|
||||
+ ok(pomp_set_lock != pomp_set_nest_lock,
|
||||
+ "expected omp_set_lock != omp_set_nest_lock, got %p and %p\n",
|
||||
+ pomp_set_lock, pomp_set_nest_lock);
|
||||
+ ok(pomp_unset_lock != pomp_unset_nest_lock,
|
||||
+ "expected omp_unset_lock != omp_unset_nest_lock, got %p and %p\n",
|
||||
+ pomp_unset_lock, pomp_unset_nest_lock);
|
||||
+ ok(pomp_test_lock != pomp_test_nest_lock,
|
||||
+ "expected omp_test_lock != omp_test_nest_lock, got %p and %p\n",
|
||||
+ pomp_test_lock, pomp_test_nest_lock);
|
||||
}
|
||||
|
||||
static void test_atomic_integer32(void)
|
||||
--
|
||||
2.5.0
|
||||
|
@ -1 +1,2 @@
|
||||
Fixes: [39058] Implement stub for vcomp._vcomp_flush
|
||||
Fixes: [26688] Implement vcomp locking functions
|
||||
|
Loading…
x
Reference in New Issue
Block a user