thr_find_thread.c (115278) | thr_find_thread.c (117706) |
---|---|
1/* 2 * Copyright (c) 2003 Daniel Eischen <deischen@freebsd.org> 3 * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 16 unchanged lines hidden (view full) --- 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * | 1/* 2 * Copyright (c) 2003 Daniel Eischen <deischen@freebsd.org> 3 * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 16 unchanged lines hidden (view full) --- 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * |
33 * $FreeBSD: head/lib/libkse/thread/thr_find_thread.c 115278 2003-05-24 02:29:25Z deischen $ | 33 * $FreeBSD: head/lib/libkse/thread/thr_find_thread.c 117706 2003-07-17 23:02:30Z davidxu $ |
34 */ 35#include <errno.h> 36#include <pthread.h> 37#include "thr_private.h" 38 39/* 40 * Find a thread in the linked list of active threads and add a reference 41 * to it. Threads with positive reference counts will not be deallocated --- 9 unchanged lines hidden (view full) --- 51 52 if (thread == NULL) 53 /* Invalid thread: */ 54 return (EINVAL); 55 56 crit = _kse_critical_enter(); 57 curkse = _get_curkse(); 58 KSE_LOCK_ACQUIRE(curkse, &_thread_list_lock); | 34 */ 35#include <errno.h> 36#include <pthread.h> 37#include "thr_private.h" 38 39/* 40 * Find a thread in the linked list of active threads and add a reference 41 * to it. Threads with positive reference counts will not be deallocated --- 9 unchanged lines hidden (view full) --- 51 52 if (thread == NULL) 53 /* Invalid thread: */ 54 return (EINVAL); 55 56 crit = _kse_critical_enter(); 57 curkse = _get_curkse(); 58 KSE_LOCK_ACQUIRE(curkse, &_thread_list_lock); |
59 TAILQ_FOREACH(pthread, &_thread_list, tle) { 60 if (pthread == thread) { 61 if ((include_dead == 0) && 62 ((pthread->state == PS_DEAD) || 63 ((pthread->state == PS_DEADLOCK) || 64 ((pthread->flags & THR_FLAGS_EXITING) != 0)))) 65 pthread = NULL; 66 else { 67 thread->refcount++; 68 if (curthread != NULL) 69 curthread->critical_count++; 70 } 71 break; | 59 pthread = _thr_hash_find(thread); 60 if (pthread) { 61 if ((include_dead == 0) && 62 ((pthread->state == PS_DEAD) || 63 ((pthread->state == PS_DEADLOCK) || 64 ((pthread->flags & THR_FLAGS_EXITING) != 0)))) 65 pthread = NULL; 66 else { 67 pthread->refcount++; 68 if (curthread != NULL) 69 curthread->critical_count++; |
72 } 73 } 74 KSE_LOCK_RELEASE(curkse, &_thread_list_lock); 75 _kse_critical_leave(crit); 76 77 /* Return zero if the thread exists: */ 78 return ((pthread != NULL) ? 0 : ESRCH); 79} --- 21 unchanged lines hidden --- | 70 } 71 } 72 KSE_LOCK_RELEASE(curkse, &_thread_list_lock); 73 _kse_critical_leave(crit); 74 75 /* Return zero if the thread exists: */ 76 return ((pthread != NULL) ? 0 : ESRCH); 77} --- 21 unchanged lines hidden --- |