summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/exceptions.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2005-12-17 04:36:39 +0000
committerChristopher Faylor <me@cgf.cx>2005-12-17 04:36:39 +0000
commitad02bb70e389235036436b8d3f3983b0cd5c1320 (patch)
treec13b960245c056b3e8d88e8bd718b773ea3034bb /winsup/cygwin/exceptions.cc
parenta249fd1c9b238c5ff15cfa6bbd879cec9fbd372c (diff)
downloadcygnal-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.cc17
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)