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>2004-01-20 22:57:29 +0300
committerChristopher Faylor <me@cgf.cx>2004-01-20 22:57:29 +0300
commit400f252d589abd1cd0cfed2ab7860100168f8042 (patch)
tree2fc76cfc864b65851b193345affffffe7c9854c6
parent3cc4ea135fdb683271016eacb95d349980eb58d7 (diff)
merge from trunk.
-rw-r--r--winsup/cygwin/Makefile.in9
-rw-r--r--winsup/cygwin/dcrt0.cc17
-rw-r--r--winsup/cygwin/sec_acl.cc5
-rw-r--r--winsup/cygwin/sigproc.cc23
-rw-r--r--winsup/cygwin/wincap.h2
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
};