thr_init.c (127556) | thr_init.c (129484) |
---|---|
1/* 2 * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 15 unchanged lines hidden (view full) --- 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * | 1/* 2 * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 15 unchanged lines hidden (view full) --- 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * |
32 * $FreeBSD: head/lib/libthr/thread/thr_init.c 127556 2004-03-29 05:45:01Z mtm $ | 32 * $FreeBSD: head/lib/libthr/thread/thr_init.c 129484 2004-05-20 12:06:16Z mtm $ |
33 */ 34 35/* Allocate space for global thread variables here: */ 36#define GLOBAL_PTHREAD_PRIVATE 37 38#include "namespace.h" 39#include <sys/param.h> 40#include <sys/types.h> --- 121 unchanged lines hidden (view full) --- 162void 163init_td_common(struct pthread *td, struct pthread_attr *attrp, int reinit) 164{ 165 /* 166 * Some parts of a pthread are initialized only once. 167 */ 168 if (!reinit) { 169 memset(td, 0, sizeof(struct pthread)); | 33 */ 34 35/* Allocate space for global thread variables here: */ 36#define GLOBAL_PTHREAD_PRIVATE 37 38#include "namespace.h" 39#include <sys/param.h> 40#include <sys/types.h> --- 121 unchanged lines hidden (view full) --- 162void 163init_td_common(struct pthread *td, struct pthread_attr *attrp, int reinit) 164{ 165 /* 166 * Some parts of a pthread are initialized only once. 167 */ 168 if (!reinit) { 169 memset(td, 0, sizeof(struct pthread)); |
170 td->cancelflags = PTHREAD_CANCEL_ENABLE | 171 PTHREAD_CANCEL_DEFERRED; | 170 td->cancelmode = M_DEFERRED; 171 td->cancelstate = M_DEFERRED; 172 td->cancellation = CS_NULL; |
172 memcpy(&td->attr, attrp, sizeof(struct pthread_attr)); 173 td->magic = PTHREAD_MAGIC; 174 TAILQ_INIT(&td->mutexq); 175 td->base_priority = PTHREAD_DEFAULT_PRIORITY; 176 td->active_priority = PTHREAD_DEFAULT_PRIORITY; 177 td->inherited_priority = PTHREAD_MIN_PRIORITY; 178 } else { 179 memset(&td->join_status, 0, sizeof(struct join_status)); --- 56 unchanged lines hidden (view full) --- 236/* 237 * Threaded process initialization 238 */ 239void 240_thread_init(void) 241{ 242 struct pthread *pthread; 243 int fd; | 173 memcpy(&td->attr, attrp, sizeof(struct pthread_attr)); 174 td->magic = PTHREAD_MAGIC; 175 TAILQ_INIT(&td->mutexq); 176 td->base_priority = PTHREAD_DEFAULT_PRIORITY; 177 td->active_priority = PTHREAD_DEFAULT_PRIORITY; 178 td->inherited_priority = PTHREAD_MIN_PRIORITY; 179 } else { 180 memset(&td->join_status, 0, sizeof(struct join_status)); --- 56 unchanged lines hidden (view full) --- 237/* 238 * Threaded process initialization 239 */ 240void 241_thread_init(void) 242{ 243 struct pthread *pthread; 244 int fd; |
244 int i; | |
245 size_t len; 246 int mib[2]; 247 int error; 248 249 /* Check if this function has already been called: */ 250 if (_thread_initial) 251 /* Only initialise the threaded application once. */ 252 return; --- 76 unchanged lines hidden (view full) --- 329 /* Set the stack attributes. */ 330 pthread->attr.stackaddr_attr = pthread->stack; 331 pthread->attr.stacksize_attr = PTHREAD_STACK_INITIAL; 332 333 /* Setup the context for initial thread. */ 334 getcontext(&pthread->ctx); 335 pthread->ctx.uc_stack.ss_sp = pthread->stack; 336 pthread->ctx.uc_stack.ss_size = PTHREAD_STACK_INITIAL; | 245 size_t len; 246 int mib[2]; 247 int error; 248 249 /* Check if this function has already been called: */ 250 if (_thread_initial) 251 /* Only initialise the threaded application once. */ 252 return; --- 76 unchanged lines hidden (view full) --- 329 /* Set the stack attributes. */ 330 pthread->attr.stackaddr_attr = pthread->stack; 331 pthread->attr.stacksize_attr = PTHREAD_STACK_INITIAL; 332 333 /* Setup the context for initial thread. */ 334 getcontext(&pthread->ctx); 335 pthread->ctx.uc_stack.ss_sp = pthread->stack; 336 pthread->ctx.uc_stack.ss_size = PTHREAD_STACK_INITIAL; |
337 338 /* Initialise the state of the initial thread: */ 339 pthread->state = PS_RUNNING; 340 341 /* Enter a loop to get the existing signal status: */ 342 for (i = 1; i < NSIG; i++) { 343 /* Check for signals which cannot be trapped. */ 344 if (i == SIGKILL || i == SIGSTOP) 345 continue; 346 347 /* Get the signal handler details. */ 348 if (__sys_sigaction(i, NULL, 349 &_thread_sigact[i - 1]) != 0) 350 PANIC("Cannot read signal handler info"); 351 } | |
352} 353 354/* 355 * Special start up code for NetBSD/Alpha 356 */ 357#if defined(__NetBSD__) && defined(__alpha__) 358int 359main(int argc, char *argv[], char *env); 360 361int 362_thread_main(int argc, char *argv[], char *env) 363{ 364 _thread_init(); 365 return (main(argc, argv, env)); 366} 367#endif | 337} 338 339/* 340 * Special start up code for NetBSD/Alpha 341 */ 342#if defined(__NetBSD__) && defined(__alpha__) 343int 344main(int argc, char *argv[], char *env); 345 346int 347_thread_main(int argc, char *argv[], char *env) 348{ 349 _thread_init(); 350 return (main(argc, argv, env)); 351} 352#endif |