pike.git / src / threads.c

version» Context lines:

pike.git/src/threads.c:1:   #include "global.h" - RCSID("$Id: threads.c,v 1.152 2001/02/06 16:10:47 grubba Exp $"); + RCSID("$Id: threads.c,v 1.153 2001/02/06 17:14:08 per Exp $");      PMOD_EXPORT int num_threads = 1;   PMOD_EXPORT int threads_disabled = 0;      #ifdef _REENTRANT   #include "threads.h"   #include "array.h"   #include "mapping.h"   #include "object.h"   #include "pike_macros.h"
pike.git/src/threads.c:1326:    *! This class allows you to have variables which are separate for each    *! thread that uses it. It has two methods: @[get()] and @[set()]. A value    *! stored in an instance of @[Thread.Local] can only be retrieved by that    *! same thread.    *!    *! @note    *! This class is simulated when Pike is compiled without thread support,    *! so it's always available.    */    - /* FIXME: Why not use an init-callback? */ - PMOD_EXPORT void f_thread_local(INT32 args) + void f_thread_local_create( INT32 args )   {    static INT32 thread_local_id = 0; -  +  ((struct thread_local *)Pike_fp->current_object->storage)->id = +  thread_local_id++; +  pop_n_elems(args); +  push_int(0); + }    -  + PMOD_EXPORT void f_thread_local(INT32 args) + {    struct object *loc = clone_object(thread_local_prog,0); -  ((struct thread_local *)loc->storage)->id = thread_local_id++; +     pop_n_elems(args);    push_object(loc);   }      /*! @decl mixed get()    *!    *! Get the thread local value.    *!    *! This returns the value prevoiusly stored in the @[Thread.Local] object by    *! the @[set()] method by this thread.
pike.git/src/threads.c:1644:    end_class("threads_disabled", 0);    tmp->flags|=PROGRAM_DESTRUCT_IMMEDIATE;    add_global_program("_disable_threads", tmp);    free_program(tmp);    }       START_NEW_PROGRAM_ID(THREAD_LOCAL);    ADD_STORAGE(struct thread_local);    ADD_FUNCTION("get",f_thread_local_get,tFunc(tNone,tMix),0);    ADD_FUNCTION("set",f_thread_local_set,tFunc(tSetvar(1,tMix),tVar(1)),0); +  ADD_FUNCTION("create",f_thread_local_create,tFunc(tVoid,tVoid),0);    thread_local_prog=Pike_compiler->new_program;    add_ref(thread_local_prog);    end_class("thread_local", 0);    if(!thread_local_prog)    fatal("Failed to initialize thread_local program!\n");    ADD_EFUN("thread_local",f_thread_local,    tFunc(tNone,tObjIs_THREAD_LOCAL),    OPT_SIDE_EFFECT);       START_NEW_PROGRAM_ID(THREAD_ID);