diff options
author | Christopher Faylor <me@cgf.cx> | 2004-01-20 22:57:29 +0300 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2004-01-20 22:57:29 +0300 |
commit | 400f252d589abd1cd0cfed2ab7860100168f8042 (patch) | |
tree | 2fc76cfc864b65851b193345affffffe7c9854c6 | |
parent | 3cc4ea135fdb683271016eacb95d349980eb58d7 (diff) |
merge from trunk.
-rw-r--r-- | winsup/cygwin/Makefile.in | 9 | ||||
-rw-r--r-- | winsup/cygwin/dcrt0.cc | 17 | ||||
-rw-r--r-- | winsup/cygwin/sec_acl.cc | 5 | ||||
-rw-r--r-- | winsup/cygwin/sigproc.cc | 23 | ||||
-rw-r--r-- | winsup/cygwin/wincap.h | 2 |
5 files changed, 41 insertions, 15 deletions
diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in index cf15b320d..5cbe318a1 100644 --- a/winsup/cygwin/Makefile.in +++ b/winsup/cygwin/Makefile.in @@ -25,6 +25,7 @@ program_transform_name:=@program_transform_name@ exec_prefix:=@exec_prefix@ bindir:=@bindir@ libdir:=@libdir@ +mandir:=@mandir@ ifeq ($(target_alias),$(host_alias)) ifeq ($(build_alias),$(host_alias)) tooldir:=$(exec_prefix) @@ -298,16 +299,16 @@ install-headers: install-man: cd $(srcdir); \ for i in `find . -type f -name '*.2'`; do \ - $(INSTALL_DATA) $$i $(tooldir)/man/man2/`basename $$i` ; \ + $(INSTALL_DATA) $$i $(mandir)/man2/`basename $$i` ; \ done; \ for i in `find . -type f -name '*.3'`; do \ - $(INSTALL_DATA) $$i $(tooldir)/man/man3/`basename $$i` ; \ + $(INSTALL_DATA) $$i $(mandir)/man3/`basename $$i` ; \ done; \ for i in `find . -type f -name '*.5'`; do \ - $(INSTALL_DATA) $$i $(tooldir)/man/man5/`basename $$i` ; \ + $(INSTALL_DATA) $$i $(mandir)/man5/`basename $$i` ; \ done; \ for i in `find . -type f -name '*.7'`; do \ - $(INSTALL_DATA) $$i $(tooldir)/man/man7/`basename $$i` ; \ + $(INSTALL_DATA) $$i $(mandir)/man7/`basename $$i` ; \ done install_target: diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 3d6b7a89b..71ae1847c 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -531,11 +531,20 @@ break_here () #endif static void -initial_env () +initial_env (bool first) { char buf[CYG_MAX_PATH + 1]; + if (!first) + /* nothing */; + else if (GetEnvironmentVariable ("CYGWIN_TESTING", buf, sizeof (buf) - 1)) + _cygwin_testing = 1; #ifdef DEBUGGING DWORD len; + static bool NO_COPY did_debugging_stuff; + if (did_debugging_stuff || (first && wincap.cant_debug_dll_entry ())) + return; + + did_debugging_stuff = true; if (GetEnvironmentVariable ("CYGWIN_SLEEP", buf, sizeof (buf) - 1)) { DWORD ms = atoi (buf); @@ -564,16 +573,13 @@ initial_env () } } #endif - - if (GetEnvironmentVariable ("CYGWIN_TESTING", buf, sizeof (buf) - 1)) - _cygwin_testing = 1; } void __stdcall dll_crt0_0 () { wincap.init (); - initial_env (); + initial_env (true); char zeros[sizeof (child_proc_info->zero)] = {0}; @@ -719,6 +725,7 @@ dll_crt0_1 (char *) /* FIXME: Verify forked children get their exception handler set up ok. */ exception_list cygwin_except_entry; + initial_env (false); check_sanity_and_sync (user_data); malloc_init (); diff --git a/winsup/cygwin/sec_acl.cc b/winsup/cygwin/sec_acl.cc index 4d0f4084b..472c20329 100644 --- a/winsup/cygwin/sec_acl.cc +++ b/winsup/cygwin/sec_acl.cc @@ -212,6 +212,11 @@ setacl (const char *file, int nentries, __aclent32_t *aclbufp) __seterrno (); return -1; } + if (!sd_ret.realloc (sd_size)) + { + set_errno (ENOMEM); + return -1; + } if (!MakeSelfRelativeSD (&sd, sd_ret, &sd_size)) { __seterrno (); diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index e143a8239..b53aa5f58 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -652,6 +652,7 @@ sigproc_init () void __stdcall sigproc_terminate (void) { + extern HANDLE hExeced; hwait_sig = NULL; if (myself->sendsig == INVALID_HANDLE_VALUE) @@ -661,9 +662,12 @@ sigproc_terminate (void) sigproc_printf ("entering"); // finished with anything it is doing ForceCloseHandle (sigcomplete_main); - HANDLE sendsig = myself->sendsig; - myself->sendsig = INVALID_HANDLE_VALUE; - CloseHandle (sendsig); + if (!hExeced) + { + HANDLE sendsig = myself->sendsig; + myself->sendsig = INVALID_HANDLE_VALUE; + CloseHandle (sendsig); + } } proc_terminate (); // Terminate process handling thread @@ -690,7 +694,11 @@ sig_send (_pinfo *p, int sig, void *tls) else { if (no_signals_available ()) - goto out; // Either exiting or not yet initializing + { + sigproc_printf ("hwait_sig %p, myself->sendsig %p, exit_state %d", + hwait_sig, myself->sendsig, exit_state); + goto out; // Either exiting or not yet initializing + } if (wait_sig_inited) wait_for_sigthread (); wait_for_completion = p != myself_nowait && _my_tls.isinitialized (); @@ -707,8 +715,6 @@ sig_send (_pinfo *p, int sig, void *tls) goto out; } - sigproc_printf ("pid %d, signal %d, its_me %d", p->pid, sig, its_me); - if (its_me) { sendsig = myself->sendsig; @@ -737,6 +743,9 @@ sig_send (_pinfo *p, int sig, void *tls) pack.wakeup = NULL; } + sigproc_printf ("sendsig %p, pid %d, signal %d, its_me %d", sendsig, p->pid, + sig, its_me); + sigset_t pending; if (!its_me) pack.mask = NULL; @@ -1108,6 +1117,8 @@ wait_sig (VOID *self) exception_list el; _my_tls.init_threadlist_exceptions (&el); + debug_printf ("entering ReadFile loop, readsig %p, myself->sendsig %p", + readsig, myself->sendsig); for (;;) { diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h index 320b75916..66ab87e27 100644 --- a/winsup/cygwin/wincap.h +++ b/winsup/cygwin/wincap.h @@ -53,6 +53,7 @@ struct wincaps unsigned pty_needs_alloc_console : 1; unsigned has_terminal_services : 1; unsigned has_switch_to_thread : 1; + unsigned cant_debug_dll_entry : 1; }; class wincapc @@ -110,6 +111,7 @@ public: bool IMPLEMENT (pty_needs_alloc_console) bool IMPLEMENT (has_terminal_services) bool IMPLEMENT (has_switch_to_thread) + bool IMPLEMENT (cant_debug_dll_entry) #undef IMPLEMENT }; |