Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2011-12-08 10:17:49 +0400
committerChristopher Faylor <me@cgf.cx>2011-12-08 10:17:49 +0400
commit5025bf330bc3d26e93f52e59a9d2df6b08ee816a (patch)
treee70fbbe8f84c8a4c5cee711e2dfab6890c0e9fd0
parent069e637c0e979de8dadf9627a1a7c6a63b464513 (diff)
* dll_init.cc (dll_dllcrt0): Don't try to initialize dll data if we're
dynamically loaded since fork() doesn't work in that scenario anyway. (dll_dllcrt0_1): Don't accommodate dynamically loaded dlls. * exceptions.cc (ctrl_c_handler): Don't lock the process; there's too much risk of deadlock. * sigproc.cc (_cygtls::remove_wq): Don't try to remove anything from the waitq if there is obviously nothing there. * strace.cc (strace::activate): Allow stracing dynamically loaded cygwin1.dll.
-rw-r--r--winsup/cygwin/ChangeLog12
-rw-r--r--winsup/cygwin/dll_init.cc14
-rw-r--r--winsup/cygwin/exceptions.cc1
-rw-r--r--winsup/cygwin/sigproc.cc2
-rw-r--r--winsup/cygwin/strace.cc2
5 files changed, 18 insertions, 13 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 5d0cbd138..329d163b3 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,15 @@
+2011-12-08 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * dll_init.cc (dll_dllcrt0): Don't try to initialize dll data if we're
+ dynamically loaded since fork() doesn't work in that scenario anyway.
+ (dll_dllcrt0_1): Don't accommodate dynamically loaded dlls.
+ * exceptions.cc (ctrl_c_handler): Don't lock the process; there's too
+ much risk of deadlock.
+ * sigproc.cc (_cygtls::remove_wq): Don't try to remove anything from
+ the waitq if there is obviously nothing there.
+ * strace.cc (strace::activate): Allow stracing dynamically loaded
+ cygwin1.dll.
+
2011-12-07 Christopher Faylor <me.cygwin2011@cgf.cx>
* fhandler_termios.cc (tty_min::kill_pgrp): Don't send __SIGSETPGRP
diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc
index 12896e2ef..8a72ecee6 100644
--- a/winsup/cygwin/dll_init.cc
+++ b/winsup/cygwin/dll_init.cc
@@ -546,12 +546,10 @@ struct dllcrt0_info
extern "C" int
dll_dllcrt0 (HMODULE h, per_process *p)
{
+ if (dynamically_loaded)
+ return 1;
dllcrt0_info x (h, p);
-
- if (_my_tls.isinitialized ())
- dll_dllcrt0_1 (&x);
- else
- _my_tls.call ((DWORD (*) (void *, void *)) dll_dllcrt0_1, &x);
+ dll_dllcrt0_1 (&x);
return x.res;
}
@@ -592,11 +590,7 @@ dll_dllcrt0_1 (VOID *x)
However, that's just a note for the record; at the moment, we can't
see any need to worry about this happening. */
- /* Partially initialize Cygwin guts for non-cygwin apps. */
- if (dynamically_loaded && user_data->magic_biscuit == 0)
- dll_crt0 (p);
- else
- check_sanity_and_sync (p);
+ check_sanity_and_sync (p);
dll_type type;
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index 019c585ef..b16e8162a 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -927,7 +927,6 @@ static BOOL WINAPI
ctrl_c_handler (DWORD type)
{
static bool saw_close;
- lock_process now;
if (!cygwin_finished_initializing)
{
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc
index 0031f73b0..8ddc047e4 100644
--- a/winsup/cygwin/sigproc.cc
+++ b/winsup/cygwin/sigproc.cc
@@ -346,7 +346,7 @@ out1:
void
_cygtls::remove_wq (DWORD wait)
{
- if (exit_state < ES_FINAL && sync_proc_subproc
+ if (exit_state < ES_FINAL && waitq_head.next && sync_proc_subproc
&& sync_proc_subproc.acquire (wait))
{
for (waitq *w = &waitq_head; w->next != NULL; w = w->next)
diff --git a/winsup/cygwin/strace.cc b/winsup/cygwin/strace.cc
index 120ba32c3..49b4c5ab9 100644
--- a/winsup/cygwin/strace.cc
+++ b/winsup/cygwin/strace.cc
@@ -34,7 +34,7 @@ class strace NO_COPY strace;
void
strace::activate (bool isfork)
{
- if (!dynamically_loaded && !_active && being_debugged ())
+ if (!_active && being_debugged ())
{
char buf[30];
__small_sprintf (buf, "cYg%8x %x %d", _STRACE_INTERFACE_ACTIVATE_ADDR, &_active, isfork);