pike.git / src / threads.c

version» Context lines:

pike.git/src/threads.c:1:   #include "global.h" - RCSID("$Id: threads.c,v 1.163 2002/09/14 02:58:49 mast Exp $"); + RCSID("$Id: threads.c,v 1.164 2002/09/14 03:03:04 mast 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:540:   }         PMOD_EXPORT int count_pike_threads(void)   {    return num_pike_threads;   }      static void check_threads(struct callback *cb, void *arg, void * arg2)   { + #ifndef HAVE_NO_YIELD +  /* If we have no yield we can't cut calls here since it's possible +  * that a thread switch will take place only occasionally in the +  * window below. */    static int div_;    if(div_++ & 255)    return;   #ifdef HAVE_GETHRTIME    {    static hrtime_t last_;    hrtime_t now = gethrtime();    if( now-last_ < 50000000 ) /* 0.05s slice */    return;    last_ = now;    }   #elif defined(USE_CLOCK_FOR_SLICES)    if (clock() - thread_start_clock < (clock_t) (CLOCKS_PER_SEC / 20))    return;   #endif -  + #endif      #ifdef DEBUG    if(thread_for_id(th_self()) != Pike_interpreter.thread_id)    fatal("thread_for_id() (or Pike_interpreter.thread_id) failed!\n")       if(Pike_interpreter.backlink != OBJ2THREAD(Pike_interpreter.thread_id))    fatal("Hashlink is wrong!\n");   #endif       THREADS_ALLOW();    /* Allow other threads to run */ - #ifdef HAVE_THR_YIELD -  thr_yield(); - #endif +  th_yield();    THREADS_DISALLOW();      #ifdef USE_CLOCK_FOR_SLICES    /* Must set the base time for the slice here since clock() returns    * thread local time. */    thread_start_clock = clock();   #endif      #ifdef DEBUG    if(thread_for_id(th_self()) != Pike_interpreter.thread_id)