Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Feb 2014 18:20:01 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-threads@FreeBSD.org
Subject:   Re: threads/186309: commit references a PR
Message-ID:  <201402011820.s11IK1Au018289@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR threads/186309; it has been noted by GNATS.

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: threads/186309: commit references a PR
Date: Sat,  1 Feb 2014 18:13:26 +0000 (UTC)

 Author: kib
 Date: Sat Feb  1 18:13:18 2014
 New Revision: 261354
 URL: http://svnweb.freebsd.org/changeset/base/261354
 
 Log:
   In _pthread_kill(), if passed pthread is current thread, do not send
   the signal second time, by adding the missed else before if statement.
   
   While there, postpone initializing local curthread variable until
   passed signal number is checked for validity.
   
   Submitted by:	John Wolfe <jlw@xinuos.com>
   PR:	threads/186309
   MFC after:	1 week
 
 Modified:
   head/lib/libthr/thread/thr_kill.c
 
 Modified: head/lib/libthr/thread/thr_kill.c
 ==============================================================================
 --- head/lib/libthr/thread/thr_kill.c	Sat Feb  1 17:53:35 2014	(r261353)
 +++ head/lib/libthr/thread/thr_kill.c	Sat Feb  1 18:13:18 2014	(r261354)
 @@ -42,24 +42,27 @@ __weak_reference(_pthread_kill, pthread_
  int
  _pthread_kill(pthread_t pthread, int sig)
  {
 -	struct pthread *curthread = _get_curthread();
 +	struct pthread *curthread;
  	int ret;
  
  	/* Check for invalid signal numbers: */
  	if (sig < 0 || sig > _SIG_MAXSIG)
  		/* Invalid signal: */
 -		ret = EINVAL;
 +		return (EINVAL);
 +
 +	curthread = _get_curthread();
 +
  	/*
  	 * Ensure the thread is in the list of active threads, and the
  	 * signal is valid (signal 0 specifies error checking only) and
  	 * not being ignored:
  	 */
 -	else if (curthread == pthread) {
 +	if (curthread == pthread) {
  		if (sig > 0)
  			_thr_send_sig(pthread, sig);
  		ret = 0;
 -	} if ((ret = _thr_find_thread(curthread, pthread, /*include dead*/0))
 -	    == 0) {
 +	} else if ((ret = _thr_find_thread(curthread, pthread,
 +	    /*include dead*/0)) == 0) {
  		if (sig > 0)
  			_thr_send_sig(pthread, sig);
  		THR_THREAD_UNLOCK(curthread, pthread);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402011820.s11IK1Au018289>