pike.git / src / threads.c

version» Context lines:

pike.git/src/threads.c:1:   /*   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id: threads.c,v 1.209 2003/02/20 16:36:54 grubba Exp $ + || $Id: threads.c,v 1.210 2003/03/05 16:18:30 mast Exp $   */      #ifndef CONFIGURE_TEST   #include "global.h" - RCSID("$Id: threads.c,v 1.209 2003/02/20 16:36:54 grubba Exp $"); + RCSID("$Id: threads.c,v 1.210 2003/03/05 16:18:30 mast Exp $");      PMOD_EXPORT int num_threads = 1;   PMOD_EXPORT int threads_disabled = 0;   #endif /* !CONFIGURE_TEST */      #ifdef _REENTRANT      #ifndef CONFIGURE_TEST      #include "threads.h"
pike.git/src/threads.c:31:   #include "main.h"   #include "module_support.h"   #include "pike_types.h"   #include "operators.h"   #include "bignum.h"   #include "signal_handler.h"   #include "pike_rusage.h"      #include <errno.h>    + #ifdef HAVE_SYS_PRCTL_H + #include <sys/prctl.h> + #endif /* HAVE_SYS_PRCTL_H */ +    PMOD_EXPORT int live_threads = 0, disallow_live_threads = 0;   PMOD_EXPORT COND_T live_threads_change;   PMOD_EXPORT COND_T threads_disabled_change;   PMOD_EXPORT size_t thread_stack_size=256 * 1204;      #else   #include "pike_threadlib.h"   #endif /* !CONFIGURE_TEST */      /* SCO magic... */
pike.git/src/threads.c:710:    INT32 tmp;       THREADS_FPRINTF(0, (stderr,"new_thread_func(): Thread %p created...\n",    arg.thread_state));      #ifdef HAVE_BROKEN_LINUX_THREAD_EUID    /* Work-around for Linux's pthreads not propagating the    * effective uid & gid.    */    if (!geteuid()) { + #if defined(HAVE_PRCTL) && defined(PR_SET_DUMPABLE) +  /* The sete?id calls will clear the dumpable state that we might +  * have set with system.dumpable. */ +  int current = prctl(PR_GET_DUMPABLE); + #endif    setegid(arg.egid);    seteuid(arg.euid); -  + #if defined(HAVE_PRCTL) && defined(PR_SET_DUMPABLE) +  if (prctl(PR_SET_DUMPABLE, current) == -1) +  Pike_fatal ("Didn't expect prctl to go wrong. errno=%d\n", errno); + #endif    }   #endif /* HAVE_BROKEN_LINUX_THREAD_EUID */       if((tmp=mt_lock_interpreter()))    Pike_fatal("Failed to lock interpreter, return value=%d, errno=%d\n",tmp,   #ifdef __NT__    GetLastError()   #else    errno   #endif
pike.git/src/threads.c:1702:      static TH_RETURN_TYPE farm(void *_a)   {    struct farmer *me = (struct farmer *)_a;      #ifdef HAVE_BROKEN_LINUX_THREAD_EUID    /* Work-around for Linux's pthreads not propagating the    * effective uid & gid.    */    if (!geteuid()) { + #if defined(HAVE_PRCTL) && defined(PR_SET_DUMPABLE) +  /* The sete?id calls will clear the dumpable state that we might +  * have set with system.dumpable. */ +  int current = prctl(PR_GET_DUMPABLE); + #endif    setegid(me->egid);    seteuid(me->euid); -  + #if defined(HAVE_PRCTL) && defined(PR_SET_DUMPABLE) +  if (prctl(PR_SET_DUMPABLE, current) == -1) +  Pike_fatal ("Didn't expect prctl to go wrong. errno=%d\n", errno); + #endif    }   #endif /* HAVE_BROKEN_LINUX_THREAD_EUID */       do    {   /* if(farmers == me) Pike_fatal("Ouch!\n"); */   /* fprintf(stderr, "farm_begin %p\n",me ); */    me->harvest( me->field );   /* fprintf(stderr, "farm_end %p\n", me); */