diff options
author | wtc%netscape.com <devnull@localhost> | 2001-09-07 00:05:50 +0000 |
---|---|---|
committer | wtc%netscape.com <devnull@localhost> | 2001-09-07 00:05:50 +0000 |
commit | 9d820d633548c689d29dc52b96818b85d9eabcbb (patch) | |
tree | a62a664dc403bca935aebcdbeb669568bb03cf10 | |
parent | 8f965bf805cb5058a51885f27cd28052b2f2e678 (diff) | |
download | nspr-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.h | 1 | ||||
-rw-r--r-- | pr/src/misc/prenv.c | 9 | ||||
-rw-r--r-- | pr/src/misc/prinit.c | 1 | ||||
-rw-r--r-- | pr/src/pthreads/ptthread.c | 1 |
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; } |