* exceptions.cc (unused_sig_wrapper): Eliminate unused parameter to asm.

* external.cc (cygwin_internal): Change CW_STRACE_ON to CW_STRACE_TOGGLE.
* strace.cc (strace::hello): Toggle strace on and off.
* sync.cc (muto::init): Renamed from constructor.
* sync.h (muto::new): Delete.
(muto::delete): Ditto.
(new_muto): Simplify.  Use muto.init for nearly everything.
* uinfo.cc (uinfo_init): Avoid closing a NULL handle.
* include/sys/cygwin.h (cygwin_getinfo_types): Rename CW_STRACE_OFF to
CW_STRACE_TOGGLE.  Delete CW_STRACE_OFF.
* include/sys/strace.h (strace): Add "inited" field.
This commit is contained in:
Christopher Faylor 2002-02-14 21:20:06 +00:00
parent 27530c3181
commit 907dc7d0c9
12 changed files with 51 additions and 27 deletions

View File

@ -1,3 +1,19 @@
2002-02-14 Christopher Faylor <cgf@redhat.com>
* exceptions.cc (unused_sig_wrapper): Eliminate unused parameter to
asm.
* external.cc (cygwin_internal): Change CW_STRACE_ON to
CW_STRACE_TOGGLE.
* strace.cc (strace::hello): Toggle strace on and off.
* sync.cc (muto::init): Renamed from constructor.
* sync.h (muto::new): Delete.
(muto::delete): Ditto.
(new_muto): Simplify. Use muto.init for nearly everything.
* uinfo.cc (uinfo_init): Avoid closing a NULL handle.
* include/sys/cygwin.h (cygwin_getinfo_types): Rename CW_STRACE_OFF to
CW_STRACE_TOGGLE. Delete CW_STRACE_OFF.
* include/sys/strace.h (strace): Add "inited" field.
2001-02-12 Corinna Vinschen <corinna@vinschen.de> 2001-02-12 Corinna Vinschen <corinna@vinschen.de>
* include/cygwin/acl.h: Fix definition of aclent_t. * include/cygwin/acl.h: Fix definition of aclent_t.

View File

@ -1220,14 +1220,14 @@ _sigdelayed0: \n\
pushl %%ecx \n\ pushl %%ecx \n\
pushl %%ebx \n\ pushl %%ebx \n\
pushl %%eax \n\ pushl %%eax \n\
pushl %7 # saved errno \n\ pushl %6 # saved errno \n\
pushl %3 # oldmask \n\ pushl %3 # oldmask \n\
pushl %4 # signal argument \n\ pushl %4 # signal argument \n\
pushl $_sigreturn \n\ pushl $_sigreturn \n\
\n\ \n\
call _reset_signal_arrived@0 \n\ call _reset_signal_arrived@0 \n\
pushl %5 # signal number \n\ pushl %5 # signal number \n\
pushl %8 # newmask \n\ pushl %7 # newmask \n\
movl $0,%0 # zero the signal number as a \n\ movl $0,%0 # zero the signal number as a \n\
# flag to the signal handler thread\n\ # flag to the signal handler thread\n\
# that it is ok to set up sigsave\n\ # that it is ok to set up sigsave\n\
@ -1238,7 +1238,7 @@ _sigdelayed0: \n\
__no_sig_end: \n\ __no_sig_end: \n\
" : "=m" (sigsave.sig) : "m" (&_impure_ptr->_errno), " : "=m" (sigsave.sig) : "m" (&_impure_ptr->_errno),
"g" (sigsave.retaddr), "g" (sigsave.oldmask), "g" (sigsave.sig), "g" (sigsave.retaddr), "g" (sigsave.oldmask), "g" (sigsave.sig),
"g" (sigsave.func), "o" (pid_offset), "g" (sigsave.saved_errno), "g" (sigsave.newmask) "g" (sigsave.func), "g" (sigsave.saved_errno), "g" (sigsave.newmask)
); );
} }
} }

View File

@ -206,7 +206,7 @@ cygwin_internal (cygwin_getinfo_types t, ...)
# undef cr # undef cr
} }
case CW_STRACE_ON: case CW_STRACE_TOGGLE:
{ {
pid_t pid = va_arg (arg, pid_t); pid_t pid = va_arg (arg, pid_t);
pinfo p (pid); pinfo p (pid);
@ -221,6 +221,7 @@ cygwin_internal (cygwin_getinfo_types t, ...)
return (DWORD) -1; return (DWORD) -1;
} }
} }
case CW_CYGWIN_PID_TO_WINPID: case CW_CYGWIN_PID_TO_WINPID:
{ {
pinfo p (va_arg (arg, pid_t)); pinfo p (va_arg (arg, pid_t));

View File

@ -145,7 +145,7 @@ read_etc_group ()
strncpy (group_name, "Administrators", sizeof (group_name)); strncpy (group_name, "Administrators", sizeof (group_name));
static NO_COPY group_lock here; static NO_COPY group_lock here = group_lock();
if (cygwin_finished_initializing) if (cygwin_finished_initializing)
here.arm (); here.arm ();

View File

@ -67,8 +67,7 @@ typedef enum
CW_GET_CYGDRIVE_INFO, CW_GET_CYGDRIVE_INFO,
CW_SET_CYGWIN_REGISTRY_NAME, CW_SET_CYGWIN_REGISTRY_NAME,
CW_GET_CYGWIN_REGISTRY_NAME, CW_GET_CYGWIN_REGISTRY_NAME,
CW_STRACE_ON, CW_STRACE_TOGGLE,
CW_STRACE_OFF,
CW_CYGWIN_PID_TO_WINPID CW_CYGWIN_PID_TO_WINPID
} cygwin_getinfo_types; } cygwin_getinfo_types;

View File

@ -43,6 +43,7 @@ public:
int active; int active;
int lmicrosec; int lmicrosec;
int execing; int execing;
int inited;
strace() : version(1) {} strace() : version(1) {}
void hello (); void hello ();
void prntf (unsigned, const char *func, const char *, ...) /*__attribute__ ((regparm(3)))*/; void prntf (unsigned, const char *func, const char *, ...) /*__attribute__ ((regparm(3)))*/;

View File

@ -452,7 +452,7 @@ peek_pipe (select_record *s, bool from_select)
n = -1; n = -1;
} }
else if (!n || !guard_mutex) else if (!n || !guard_mutex)
/* no guard mutex or nothing to read fromt he pipe. */; /* no guard mutex or nothing to read from the pipe. */;
else if (WaitForSingleObject (guard_mutex, 0) != WAIT_OBJECT_0) else if (WaitForSingleObject (guard_mutex, 0) != WAIT_OBJECT_0)
{ {
select_printf ("%s, couldn't get mutex %p, %E", fh->get_name (), select_printf ("%s, couldn't get mutex %p, %E", fh->get_name (),

View File

@ -1182,7 +1182,7 @@ wait_sig (VOID *)
/* just forcing the loop */ /* just forcing the loop */
break; break;
/* Internal signal to force a flush of strace data to disk. */ /* Internal signal to turn on stracing. */
case __SIGSTRACE: case __SIGSTRACE:
strace.hello (); strace.hello ();
break; break;

View File

@ -34,6 +34,13 @@ void
strace::hello() strace::hello()
{ {
char buf[30]; char buf[30];
if (inited)
{
active ^= 1;
return;
}
__small_sprintf (buf, "cYg%8x %x", _STRACE_INTERFACE_ACTIVATE_ADDR, &active); __small_sprintf (buf, "cYg%8x %x", _STRACE_INTERFACE_ACTIVATE_ADDR, &active);
OutputDebugString (buf); OutputDebugString (buf);

View File

@ -28,18 +28,24 @@ muto NO_COPY muto_start;
#undef WaitForSingleObject #undef WaitForSingleObject
/* Constructor */ /* Constructor */
muto::muto (int inh, const char *s) : sync (0), visits(0), waiters(-1), tid (0), next (NULL) muto *
muto::init (int inh, const char *s)
{ {
waiters = -1;
/* Create event which is used in the fallback case when blocking is necessary */ /* Create event which is used in the fallback case when blocking is necessary */
if (!(bruteforce = CreateEvent (inh ? &sec_all_nih : &sec_none_nih, FALSE, FALSE, name))) if (!(bruteforce = CreateEvent (inh ? &sec_all_nih : &sec_none_nih, FALSE, FALSE, NULL)))
{ {
DWORD oerr = GetLastError (); DWORD oerr = GetLastError ();
SetLastError (oerr); SetLastError (oerr);
return; return NULL;
} }
name = s; name = s;
next = muto_start.next;
muto_start.next = this;
return this;
} }
#if 0 /* FIXME: Do we need this? mutos aren't destroyed until process exit */
/* Destructor (racy?) */ /* Destructor (racy?) */
muto::~muto () muto::~muto ()
{ {
@ -52,6 +58,7 @@ muto::~muto ()
if (h) if (h)
CloseHandle (h); CloseHandle (h);
} }
#endif
/* Acquire the lock. Argument is the number of milliseconds to wait for /* Acquire the lock. Argument is the number of milliseconds to wait for
the lock. Multiple visits from the same thread are allowed and should the lock. Multiple visits from the same thread are allowed and should

View File

@ -23,17 +23,13 @@ public:
class muto *next; class muto *next;
const char *name; const char *name;
muto() {}
/* The real constructor. */ /* The real constructor. */
muto(int inh, const char *name); muto *init(int inh, const char *name) __attribute__ ((regparm (3)));
void *operator new (size_t, void *p) {return p;} #if 0 /* FIXME: See comment in sync.cc */
void *operator new (size_t) {return ::new muto; } ~muto ()
void operator delete (void *) {;} /* can't handle allocated mutos #endif
currently */ int acquire (DWORD ms = INFINITE) __attribute__ ((regparm (1))); /* Acquire the lock. */
~muto ();
int acquire (DWORD ms = INFINITE) __attribute__ ((regparm(1))); /* Acquire the lock. */
int release (); /* Release the lock. */ int release (); /* Release the lock. */
/* Return true if caller thread owns the lock. */ /* Return true if caller thread owns the lock. */
@ -48,9 +44,6 @@ extern muto muto_start;
/* Use a statically allocated buffer as the storage for a muto */ /* Use a statically allocated buffer as the storage for a muto */
#define new_muto(__inh, __name) \ #define new_muto(__inh, __name) \
({ \ ({ \
static volatile __attribute__((section(".data_cygwin_nocopy"))) muto __mbuf; \ static muto __mbuf __attribute__((section(".data_cygwin_nocopy"))); \
(void) new ((void *) &__mbuf) muto (__inh, __name); \ __mbuf.init (__inh, __name); \
__mbuf.next = muto_start.next; \
muto_start.next = (muto *) &__mbuf; \
(muto *) &__mbuf; \
}) })

View File

@ -244,7 +244,7 @@ uinfo_init ()
Setting `impersonated' to TRUE seems to be wrong but it Setting `impersonated' to TRUE seems to be wrong but it
isn't. Impersonated is thought as "Current User and `token' isn't. Impersonated is thought as "Current User and `token'
are coincident". See seteuid() for the mechanism behind that. */ are coincident". See seteuid() for the mechanism behind that. */
if (cygheap->user.token != INVALID_HANDLE_VALUE) if (cygheap->user.token != INVALID_HANDLE_VALUE && cygheap->user.token != NULL)
CloseHandle (cygheap->user.token); CloseHandle (cygheap->user.token);
cygheap->user.token = INVALID_HANDLE_VALUE; cygheap->user.token = INVALID_HANDLE_VALUE;
cygheap->user.impersonated = TRUE; cygheap->user.impersonated = TRUE;