diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 48cf9364d..d50eda528 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2005-09-19 Christopher Faylor + + * sigproc.cc (talktome): Take siginfo_t argument. Don't scan all pids + trying to find one that's talking to me. Just use the pid from + siginfo_t. + (wait_pid): Pass siginfo_t argument to talktome. + 2005-09-17 Christopher Faylor * pipe.cc (fhandler_pipe::open): Use 'cfree' to free buffer since it is diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 3766df7ea..59f79961d 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -922,13 +922,11 @@ stopped_or_terminated (waitq *parent_w, _pinfo *child) } static void -talktome () +talktome (siginfo_t& si) { - winpids pids ((DWORD) PID_MAP_RW); - for (unsigned i = 0; i < pids.npids; i++) - if (pids[i]->hello_pid == myself->pid) - if (!IsBadWritePtr (pids[i], sizeof (_pinfo))) - pids[i]->commune_recv (); + pinfo p (si.si_pid, PID_MAP_RW); + if (p) + p->commune_recv (); } void @@ -1041,7 +1039,7 @@ wait_sig (VOID *self) switch (pack.si.si_signo) { case __SIGCOMMUNE: - talktome (); + talktome (pack.si); break; case __SIGSTRACE: strace.hello ();