* dtable.cc (dtable::find_fifo): Release lock after fifo found (still racy).
* fhandler.h (fhandler_fifo::get_io_handle): New fifo-specific method. * fhandler_fifo.cc (fhandler_fifo::close): Close output_handle only if it is open. (fhandler_fifo::open_not_mine): Reorganize slightly. Don't call _pinfo methods when the fifo is owned by me or suffer dtable lock_cs deadlock. (fhandler_fifo::open): Call open_not_mine first, otherwise open myself (racy). * pinfo.cc (_pinfo::commune_recv): Duplicate fifo handles here in requesting processes arena to avoid one potential race (of many). (_pinfo::commune_send): Move all PICOM_FIFO code under one case statement. * thread.cc (pthread::init_mainthread) Use existing hMainProc handle rather than calling GetCurrentProcess.
This commit is contained in:
@@ -178,9 +178,8 @@ pthread::init_mainthread ()
|
||||
|
||||
set_tls_self_pointer (thread);
|
||||
thread->thread_id = GetCurrentThreadId ();
|
||||
if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
|
||||
GetCurrentProcess (), &thread->win32_obj_id,
|
||||
0, FALSE, DUPLICATE_SAME_ACCESS))
|
||||
if (!DuplicateHandle (hMainProc, GetCurrentThread (), hMainProc,
|
||||
&thread->win32_obj_id, 0, FALSE, DUPLICATE_SAME_ACCESS))
|
||||
api_fatal ("failed to create mainthread handle");
|
||||
if (!thread->create_cancel_event ())
|
||||
api_fatal ("couldn't create cancel event for main thread");
|
||||
|
Reference in New Issue
Block a user