From e24f45ee3e53dacdfc6f1b7aeaa50a6944469241 Mon Sep 17 00:00:00 2001 From: "wtc%netscape.com" Date: Fri, 22 Feb 2002 02:52:28 +0000 Subject: [PATCH] Bugzilla bug 30746: fixed the problem of the previous NT primordial thread fix in native threads only mode. git-svn-id: svn://10.0.0.236/trunk@115197 18797224-902f-48f8-a5cc-f745e15eee43 --- .../nsprpub/pr/src/threads/combined/prucpu.c | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/mozilla/nsprpub/pr/src/threads/combined/prucpu.c b/mozilla/nsprpub/pr/src/threads/combined/prucpu.c index b41f859357a..be4203d61ae 100644 --- a/mozilla/nsprpub/pr/src/threads/combined/prucpu.c +++ b/mozilla/nsprpub/pr/src/threads/combined/prucpu.c @@ -70,6 +70,9 @@ void _PR_InitCPUs() { PRThread *me = _PR_MD_CURRENT_THREAD(); + if (_native_threads_only) + return; + _pr_cpuID = 0; _MD_NEW_LOCK( &_pr_cpuLock); #if !defined(_PR_LOCAL_THREADS_ONLY) && !defined(_PR_GLOBAL_THREADS_ONLY) @@ -81,8 +84,7 @@ void _PR_InitCPUs() #ifdef _PR_LOCAL_THREADS_ONLY #ifdef HAVE_CUSTOM_USER_THREADS - if (!_native_threads_only) - _PR_MD_CREATE_PRIMORDIAL_USER_THREAD(me); + _PR_MD_CREATE_PRIMORDIAL_USER_THREAD(me); #endif /* Now start the first CPU. */ @@ -188,6 +190,8 @@ static PRStatus _PR_StartCPU(_PRCPU *cpu, PRThread *thread) ** native thread. That stack will be used by the cpu when pausing. */ + PR_ASSERT(!_native_threads_only); + cpu->last_clock = PR_IntervalNow(); /* Before we create any threads on this CPU we have to @@ -197,25 +201,23 @@ static PRStatus _PR_StartCPU(_PRCPU *cpu, PRThread *thread) _PR_MD_INIT_RUNNING_CPU(cpu); thread->cpu = cpu; - if (!_native_threads_only) { - cpu->idle_thread = _PR_CreateThread(PR_SYSTEM_THREAD, - _PR_CPU_Idle, - (void *)cpu, - PR_PRIORITY_NORMAL, - PR_LOCAL_THREAD, - PR_UNJOINABLE_THREAD, - 0, - _PR_IDLE_THREAD); + cpu->idle_thread = _PR_CreateThread(PR_SYSTEM_THREAD, + _PR_CPU_Idle, + (void *)cpu, + PR_PRIORITY_NORMAL, + PR_LOCAL_THREAD, + PR_UNJOINABLE_THREAD, + 0, + _PR_IDLE_THREAD); - if (!cpu->idle_thread) { - /* didn't clean up CPU queue XXXMB */ - PR_DELETE(cpu); - return PR_FAILURE; - } - PR_ASSERT(cpu->idle_thread->cpu == cpu); + if (!cpu->idle_thread) { + /* didn't clean up CPU queue XXXMB */ + PR_DELETE(cpu); + return PR_FAILURE; + } + PR_ASSERT(cpu->idle_thread->cpu == cpu); - cpu->idle_thread->no_sched = 0; - } + cpu->idle_thread->no_sched = 0; cpu->thread = thread;