vcomp: Implement _vcomp_enter_critsect and _vcomp_leave_critsect.
This commit is contained in:
parent
89b383740c
commit
b0e4fd05e5
|
@ -979,6 +979,40 @@ void WINAPIV _vcomp_fork(BOOL ifval, int nargs, void *wrapper, ...)
|
||||||
__ms_va_end(team_data.valist);
|
__ms_va_end(team_data.valist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EnterCriticalSection(*critsect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDECL _vcomp_leave_critsect(CRITICAL_SECTION *critsect)
|
||||||
|
{
|
||||||
|
TRACE("(%p)\n", critsect);
|
||||||
|
LeaveCriticalSection(critsect);
|
||||||
|
}
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
|
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
|
||||||
{
|
{
|
||||||
TRACE("(%p, %d, %p)\n", instance, reason, reserved);
|
TRACE("(%p, %d, %p)\n", instance, reason, reserved);
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
@ cdecl _vcomp_barrier()
|
@ cdecl _vcomp_barrier()
|
||||||
@ stub _vcomp_copyprivate_broadcast
|
@ stub _vcomp_copyprivate_broadcast
|
||||||
@ stub _vcomp_copyprivate_receive
|
@ stub _vcomp_copyprivate_receive
|
||||||
@ stub _vcomp_enter_critsect
|
@ cdecl _vcomp_enter_critsect(ptr)
|
||||||
@ stub _vcomp_flush
|
@ stub _vcomp_flush
|
||||||
@ cdecl _vcomp_for_dynamic_init(long long long long long)
|
@ cdecl _vcomp_for_dynamic_init(long long long long long)
|
||||||
@ stub _vcomp_for_dynamic_init_i8
|
@ stub _vcomp_for_dynamic_init_i8
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
@ stub _vcomp_for_static_simple_init_i8
|
@ stub _vcomp_for_static_simple_init_i8
|
||||||
@ varargs _vcomp_fork(long long ptr)
|
@ varargs _vcomp_fork(long long ptr)
|
||||||
@ stub _vcomp_get_thread_num
|
@ stub _vcomp_get_thread_num
|
||||||
@ stub _vcomp_leave_critsect
|
@ cdecl _vcomp_leave_critsect(ptr)
|
||||||
@ stub _vcomp_master_barrier
|
@ stub _vcomp_master_barrier
|
||||||
@ cdecl _vcomp_master_begin()
|
@ cdecl _vcomp_master_begin()
|
||||||
@ cdecl _vcomp_master_end()
|
@ cdecl _vcomp_master_end()
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
@ cdecl _vcomp_barrier() vcomp._vcomp_barrier
|
@ cdecl _vcomp_barrier() vcomp._vcomp_barrier
|
||||||
@ stub _vcomp_copyprivate_broadcast
|
@ stub _vcomp_copyprivate_broadcast
|
||||||
@ stub _vcomp_copyprivate_receive
|
@ stub _vcomp_copyprivate_receive
|
||||||
@ stub _vcomp_enter_critsect
|
@ cdecl _vcomp_enter_critsect(ptr) vcomp._vcomp_enter_critsect
|
||||||
@ stub _vcomp_flush
|
@ stub _vcomp_flush
|
||||||
@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init
|
@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init
|
||||||
@ stub _vcomp_for_dynamic_init_i8
|
@ stub _vcomp_for_dynamic_init_i8
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
@ stub _vcomp_for_static_simple_init_i8
|
@ stub _vcomp_for_static_simple_init_i8
|
||||||
@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork
|
@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork
|
||||||
@ stub _vcomp_get_thread_num
|
@ stub _vcomp_get_thread_num
|
||||||
@ stub _vcomp_leave_critsect
|
@ cdecl _vcomp_leave_critsect(ptr) vcomp._vcomp_leave_critsect
|
||||||
@ stub _vcomp_master_barrier
|
@ stub _vcomp_master_barrier
|
||||||
@ cdecl _vcomp_master_begin() vcomp._vcomp_master_begin
|
@ cdecl _vcomp_master_begin() vcomp._vcomp_master_begin
|
||||||
@ cdecl _vcomp_master_end() vcomp._vcomp_master_end
|
@ cdecl _vcomp_master_end() vcomp._vcomp_master_end
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
@ cdecl _vcomp_barrier() vcomp._vcomp_barrier
|
@ cdecl _vcomp_barrier() vcomp._vcomp_barrier
|
||||||
@ stub _vcomp_copyprivate_broadcast
|
@ stub _vcomp_copyprivate_broadcast
|
||||||
@ stub _vcomp_copyprivate_receive
|
@ stub _vcomp_copyprivate_receive
|
||||||
@ stub _vcomp_enter_critsect
|
@ cdecl _vcomp_enter_critsect(ptr) vcomp._vcomp_enter_critsect
|
||||||
@ stub _vcomp_flush
|
@ stub _vcomp_flush
|
||||||
@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init
|
@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init
|
||||||
@ stub _vcomp_for_dynamic_init_i8
|
@ stub _vcomp_for_dynamic_init_i8
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
@ stub _vcomp_for_static_simple_init_i8
|
@ stub _vcomp_for_static_simple_init_i8
|
||||||
@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork
|
@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork
|
||||||
@ stub _vcomp_get_thread_num
|
@ stub _vcomp_get_thread_num
|
||||||
@ stub _vcomp_leave_critsect
|
@ cdecl _vcomp_leave_critsect(ptr) vcomp._vcomp_leave_critsect
|
||||||
@ stub _vcomp_master_barrier
|
@ stub _vcomp_master_barrier
|
||||||
@ cdecl _vcomp_master_begin() vcomp._vcomp_master_begin
|
@ cdecl _vcomp_master_begin() vcomp._vcomp_master_begin
|
||||||
@ cdecl _vcomp_master_end() vcomp._vcomp_master_end
|
@ cdecl _vcomp_master_end() vcomp._vcomp_master_end
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
@ cdecl _vcomp_barrier() vcomp._vcomp_barrier
|
@ cdecl _vcomp_barrier() vcomp._vcomp_barrier
|
||||||
@ stub _vcomp_copyprivate_broadcast
|
@ stub _vcomp_copyprivate_broadcast
|
||||||
@ stub _vcomp_copyprivate_receive
|
@ stub _vcomp_copyprivate_receive
|
||||||
@ stub _vcomp_enter_critsect
|
@ cdecl _vcomp_enter_critsect(ptr) vcomp._vcomp_enter_critsect
|
||||||
@ stub _vcomp_flush
|
@ stub _vcomp_flush
|
||||||
@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init
|
@ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init
|
||||||
@ stub _vcomp_for_dynamic_init_i8
|
@ stub _vcomp_for_dynamic_init_i8
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
@ stub _vcomp_for_static_simple_init_i8
|
@ stub _vcomp_for_static_simple_init_i8
|
||||||
@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork
|
@ varargs _vcomp_fork(long long ptr) vcomp._vcomp_fork
|
||||||
@ stub _vcomp_get_thread_num
|
@ stub _vcomp_get_thread_num
|
||||||
@ stub _vcomp_leave_critsect
|
@ cdecl _vcomp_leave_critsect(ptr) vcomp._vcomp_leave_critsect
|
||||||
@ stub _vcomp_master_barrier
|
@ stub _vcomp_master_barrier
|
||||||
@ cdecl _vcomp_master_begin() vcomp._vcomp_master_begin
|
@ cdecl _vcomp_master_begin() vcomp._vcomp_master_begin
|
||||||
@ cdecl _vcomp_master_end() vcomp._vcomp_master_end
|
@ cdecl _vcomp_master_end() vcomp._vcomp_master_end
|
||||||
|
|
Loading…
Reference in New Issue