diff options
author | sdagley%netscape.com <devnull@localhost> | 1999-10-09 03:39:54 +0000 |
---|---|---|
committer | sdagley%netscape.com <devnull@localhost> | 1999-10-09 03:39:54 +0000 |
commit | 8589656a7dc28a7efee4bab947387d06245d168b (patch) | |
tree | 484bb3b0a00b6478d3ca63c45dbc83554d102843 | |
parent | 5defe8bdfb55bc772192547e1d5770b265cfaaed (diff) | |
download | nspr-hg-8589656a7dc28a7efee4bab947387d06245d168b.tar.gz |
XP_MAC GC leak detector changes: using LMGetCurStackBase to compute stack bottom, and considering all threads GCable. r=sdagley (checking in for beard). bug=15906
-rw-r--r-- | pr/src/threads/combined/pruthr.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/pr/src/threads/combined/pruthr.c b/pr/src/threads/combined/pruthr.c index 38d84745..84432f75 100644 --- a/pr/src/threads/combined/pruthr.c +++ b/pr/src/threads/combined/pruthr.c @@ -20,6 +20,10 @@ #include <signal.h> #include <string.h> +#ifdef XP_MAC +#include <LowMem.h> +#endif + /* _pr_activeLock protects the following global variables */ PRLock *_pr_activeLock; PRInt32 _pr_primordialExitCount; /* In PR_Cleanup(), the primordial thread @@ -84,6 +88,8 @@ void _PR_InitThreads(PRThreadType type, PRThreadPriority priority, #else #if defined(SOLARIS) || defined (UNIXWARE) && defined (USR_SVR4_THREADS) stack->stackTop = (char*) &thread; +#elif defined(XP_MAC) + stack->stackTop = (char*) LMGetCurStackBase(); #else stack->stackTop = (char*) ((((long)&type + _pr_pageSize - 1) >> _pr_pageShift) << _pr_pageShift); @@ -1578,11 +1584,19 @@ PR_IMPLEMENT(void) PR_SuspendAll(void) _PR_MD_BEGIN_SUSPEND_ALL(); for (qp = _PR_ACTIVE_LOCAL_THREADQ().next; qp != &_PR_ACTIVE_LOCAL_THREADQ(); qp = qp->next) { +#ifdef XP_MAC + /* consider all threads on the Mac GCable. */ + if (me != _PR_ACTIVE_THREAD_PTR(qp)) { + _PR_Suspend(_PR_ACTIVE_THREAD_PTR(qp)); + PR_ASSERT((_PR_ACTIVE_THREAD_PTR(qp))->state != _PR_RUNNING); + } +#else if ((me != _PR_ACTIVE_THREAD_PTR(qp)) && (_PR_ACTIVE_THREAD_PTR(qp)->flags & _PR_GCABLE_THREAD)) { _PR_Suspend(_PR_ACTIVE_THREAD_PTR(qp)); PR_ASSERT((_PR_ACTIVE_THREAD_PTR(qp))->state != _PR_RUNNING); } +#endif } for (qp = _PR_ACTIVE_GLOBAL_THREADQ().next; qp != &_PR_ACTIVE_GLOBAL_THREADQ(); qp = qp->next) { @@ -1609,9 +1623,14 @@ PR_IMPLEMENT(void) PR_ResumeAll(void) _PR_MD_BEGIN_RESUME_ALL(); for (qp = _PR_ACTIVE_LOCAL_THREADQ().next; qp != &_PR_ACTIVE_LOCAL_THREADQ(); qp = qp->next) { +#ifdef XP_MAC + if (me != _PR_ACTIVE_THREAD_PTR(qp)) + _PR_Resume(_PR_ACTIVE_THREAD_PTR(qp)); +#else if ((me != _PR_ACTIVE_THREAD_PTR(qp)) && (_PR_ACTIVE_THREAD_PTR(qp)->flags & _PR_GCABLE_THREAD)) _PR_Resume(_PR_ACTIVE_THREAD_PTR(qp)); +#endif } for (qp = _PR_ACTIVE_GLOBAL_THREADQ().next; qp != &_PR_ACTIVE_GLOBAL_THREADQ(); qp = qp->next) { |