kern/150138: commit references a PR

dfilter service dfilter at FreeBSD.ORG
Tue Aug 31 07:20:12 UTC 2010


The following reply was made to PR kern/150138; it has been noted by GNATS.

From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: kern/150138: commit references a PR
Date: Tue, 31 Aug 2010 07:16:01 +0000 (UTC)

 Author: davidxu
 Date: Tue Aug 31 07:15:50 2010
 New Revision: 212047
 URL: http://svn.freebsd.org/changeset/base/212047
 
 Log:
   If a process is being debugged, skips job control caused by SIGSTOP/SIGCONT
   signals, because it is managed by debugger, however a normal signal sent to
   a interruptibly sleeping thread wakes up the thread so it will handle the
   signal when the process leaves the stopped state.
   
   PR:	150138
   MFC after:	1 week
 
 Modified:
   head/sys/kern/kern_sig.c
 
 Modified: head/sys/kern/kern_sig.c
 ==============================================================================
 --- head/sys/kern/kern_sig.c	Tue Aug 31 06:22:03 2010	(r212046)
 +++ head/sys/kern/kern_sig.c	Tue Aug 31 07:15:50 2010	(r212047)
 @@ -2139,20 +2139,9 @@ tdsendsignal(struct proc *p, struct thre
  	 * We try do the per-process part here.
  	 */
  	if (P_SHOULDSTOP(p)) {
 -		/*
 -		 * The process is in stopped mode. All the threads should be
 -		 * either winding down or already on the suspended queue.
 -		 */
 -		if (p->p_flag & P_TRACED) {
 -			/*
 -			 * The traced process is already stopped,
 -			 * so no further action is necessary.
 -			 * No signal can restart us.
 -			 */
 -			goto out;
 -		}
 -
  		if (sig == SIGKILL) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
  			/*
  			 * SIGKILL sets process running.
  			 * It will die elsewhere.
 @@ -2163,6 +2152,8 @@ tdsendsignal(struct proc *p, struct thre
  		}
  
  		if (prop & SA_CONT) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
  			/*
  			 * If SIGCONT is default (or ignored), we continue the
  			 * process but don't leave the signal in sigqueue as
 @@ -2207,6 +2198,8 @@ tdsendsignal(struct proc *p, struct thre
  		}
  
  		if (prop & SA_STOP) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
  			/*
  			 * Already stopped, don't need to stop again
  			 * (If we did the shell could get confused).
 _______________________________________________
 svn-src-all at freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
 


More information about the freebsd-bugs mailing list