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
This commit is contained in:
parent
a865b1a02e
commit
082aa03e4b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=261354
@ -42,24 +42,27 @@ __weak_reference(_pthread_kill, pthread_kill);
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user