summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwtc%netscape.com <devnull@localhost>2001-09-07 00:05:50 +0000
committerwtc%netscape.com <devnull@localhost>2001-09-07 00:05:50 +0000
commit9d820d633548c689d29dc52b96818b85d9eabcbb (patch)
treea62a664dc403bca935aebcdbeb669568bb03cf10
parent8f965bf805cb5058a51885f27cd28052b2f2e678 (diff)
downloadnspr-hg-9d820d633548c689d29dc52b96818b85d9eabcbb.tar.gz
Bugzilla bug 95773: Added _PR_CleanupEnv() and call it from PR_Cleanup().
The patch is contributed by jeff@NerdOne.com. Modified files: primpl.h prenv.c prinit.c ptthread.c
-rw-r--r--pr/include/private/primpl.h1
-rw-r--r--pr/src/misc/prenv.c9
-rw-r--r--pr/src/misc/prinit.c1
-rw-r--r--pr/src/pthreads/ptthread.c1
4 files changed, 12 insertions, 0 deletions
diff --git a/pr/include/private/primpl.h b/pr/include/private/primpl.h
index 826dc716..266595f0 100644
--- a/pr/include/private/primpl.h
+++ b/pr/include/private/primpl.h
@@ -1735,6 +1735,7 @@ extern void _PR_InitMW(void);
extern void _PR_InitRWLocks(void);
extern void _PR_NotifyCondVar(PRCondVar *cvar, PRThread *me);
extern void _PR_CleanupThread(PRThread *thread);
+extern void _PR_CleanupEnv(void);
extern void _PR_CleanupLayerCache(void);
extern void _PR_CleanupStacks(void);
extern void _PR_CleanupThreads(void);
diff --git a/pr/src/misc/prenv.c b/pr/src/misc/prenv.c
index 6ae069fc..75af10fb 100644
--- a/pr/src/misc/prenv.c
+++ b/pr/src/misc/prenv.c
@@ -38,17 +38,21 @@
/* Lock used to lock the environment */
#if defined(_PR_NO_PREEMPT)
#define _PR_NEW_LOCK_ENV()
+#define _PR_DELETE_LOCK_ENV()
#define _PR_LOCK_ENV()
#define _PR_UNLOCK_ENV()
#elif defined(_PR_LOCAL_THREADS_ONLY)
extern _PRCPU * _pr_primordialCPU;
static PRIntn _is;
#define _PR_NEW_LOCK_ENV()
+#define _PR_DELETE_LOCK_ENV()
#define _PR_LOCK_ENV() if (_pr_primordialCPU) _PR_INTSOFF(_is);
#define _PR_UNLOCK_ENV() if (_pr_primordialCPU) _PR_INTSON(_is);
#else
static PRLock *_pr_envLock = NULL;
#define _PR_NEW_LOCK_ENV() {_pr_envLock = PR_NewLock();}
+#define _PR_DELETE_LOCK_ENV() \
+ { if (_pr_envLock) { PR_DestroyLock(_pr_envLock); _pr_envLock = NULL; } }
#define _PR_LOCK_ENV() { if (_pr_envLock) PR_Lock(_pr_envLock); }
#define _PR_UNLOCK_ENV() { if (_pr_envLock) PR_Unlock(_pr_envLock); }
#endif
@@ -60,6 +64,11 @@ void _PR_InitEnv()
_PR_NEW_LOCK_ENV();
}
+void _PR_CleanupEnv(void)
+{
+ _PR_DELETE_LOCK_ENV();
+}
+
PR_IMPLEMENT(char*) PR_GetEnv(const char *var)
{
char *ev;
diff --git a/pr/src/misc/prinit.c b/pr/src/misc/prinit.c
index b9a4b07a..38fe765a 100644
--- a/pr/src/misc/prinit.c
+++ b/pr/src/misc/prinit.c
@@ -448,6 +448,7 @@ PR_IMPLEMENT(PRStatus) PR_Cleanup()
*/
_PR_CleanupThreads();
_PR_CleanupLayerCache();
+ _PR_CleanupEnv();
_PR_CleanupStacks();
_PR_CleanupBeforeExit();
_pr_initialized = PR_FALSE;
diff --git a/pr/src/pthreads/ptthread.c b/pr/src/pthreads/ptthread.c
index 3ae5feee..36c0ae2a 100644
--- a/pr/src/pthreads/ptthread.c
+++ b/pr/src/pthreads/ptthread.c
@@ -937,6 +937,7 @@ PR_IMPLEMENT(PRStatus) PR_Cleanup()
}
_pt_thread_death(me);
_PR_CleanupLayerCache();
+ _PR_CleanupEnv();
_pr_initialized = PR_FALSE;
return PR_SUCCESS;
}