Skip to content

Commit

Permalink
cygthread: suspend thread before terminating.
Browse files Browse the repository at this point in the history
It seems SuspendThread makes sure the thread is "booted" from emulation
before it is suspended.  Hopefully this means it won't be holding any
locks or otherwise leave emulation in a bad state when it's terminated.
  • Loading branch information
jeremyd2019 committed Nov 12, 2024
1 parent 16dfe94 commit c65ed81
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions winsup/cygwin/cygthread.cc
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,20 @@ cygthread::terminate_thread ()
if (!inuse)
goto force_notterminated;

if (_my_tls._ctinfo != this)
{
#if 0
CONTEXT context;
context.ContextFlags = CONTEXT_CONTROL;
#endif
SuspendThread(h);
#if 0
GetThreadContext(h, &context);
#else
yield ();
#endif
}

TerminateThread (h, 0);
WaitForSingleObject (h, INFINITE);
CloseHandle (h);
Expand Down

0 comments on commit c65ed81

Please sign in to comment.