diff options
author | Christopher Faylor <me@cgf.cx> | 2005-12-17 04:36:39 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2005-12-17 04:36:39 +0000 |
commit | ad02bb70e389235036436b8d3f3983b0cd5c1320 (patch) | |
tree | c13b960245c056b3e8d88e8bd718b773ea3034bb /winsup/cygwin/exceptions.cc | |
parent | a249fd1c9b238c5ff15cfa6bbd879cec9fbd372c (diff) | |
download | cygnal-ad02bb70e389235036436b8d3f3983b0cd5c1320.tar.gz cygnal-ad02bb70e389235036436b8d3f3983b0cd5c1320.tar.bz2 cygnal-ad02bb70e389235036436b8d3f3983b0cd5c1320.zip |
* winsup.h (child_copy): Change prototype to match new functionality.
* cygheap.cc (cygheap_fixup_in_child): Accommodate new child_copy arguments.
* dcrt0.cc (dll_data_start): Move definition here from fork.
(dll_data_end): Ditto.
(dll_bss_start): Ditto.
(dll_bss_end): Ditto.
(handle_fork): New function. Called when forked to deal with fork issues and
copy data to this process from the parent.
(dll_crt0_0): Call handle_fork when _PROC_FORK condition.
(dll_crt0): Don't copy user_data when we've forked. Don't zero first element
of main_environment ever.
(cygwin_dll_init): Ditto.
* fork.cc (child_copy): Rename from fork_copy and change arguments so that each
pair of things to copy gets its own descriptor.
(frok::child): Remove fixup_mmaps_after_fork call here. Move to handle_fork in
dcrt0.cc.
(frok::parent): Use child_copy rather than fork_copy and accommodate changes in
parameters.
* exceptions.cc (setup_handler): Delay test of whether we're locked until after
GetThreadContext has been called since there are apparently cases where
SuspendThread does not cause an immediate thread suspension.
Diffstat (limited to 'winsup/cygwin/exceptions.cc')
-rw-r--r-- | winsup/cygwin/exceptions.cc | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 4844a02bc..9b989ee9e 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -786,17 +786,12 @@ setup_handler (int sig, void *handler, struct sigaction& siga, _cygtls *tls) ResumeThread (hth); break; } - if (tls->incyg || tls->spinning || tls->locked ()) - sigproc_printf ("incyg %d, spinning %d, locked %d\n", - tls->incyg, tls->spinning, tls->locked ()); - else - { - cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER; - if (!GetThreadContext (hth, &cx)) - system_printf ("couldn't get context of main thread, %E"); - else if (interruptible (cx.Eip)) - interrupted = tls->interrupt_now (&cx, sig, handler, siga); - } + cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER; + if (!GetThreadContext (hth, &cx)) + system_printf ("couldn't get context of main thread, %E"); + else if (interruptible (cx.Eip) && + !(tls->incyg || tls->spinning || tls->locked ())) + interrupted = tls->interrupt_now (&cx, sig, handler, siga); res = ResumeThread (hth); if (interrupted) |