diff options
author | wtc%netscape.com <devnull@localhost> | 2001-05-04 23:07:34 +0000 |
---|---|---|
committer | wtc%netscape.com <devnull@localhost> | 2001-05-04 23:07:34 +0000 |
commit | 5d3858cef04f87be4016bca2d1825748bf628e6e (patch) | |
tree | cb1158a3fe79fc2988b6546dcce8f21e3f8bc90b | |
parent | 8636fff3222ecfb669741ad210a3ec7e3e96fc1e (diff) | |
download | nspr-hg-5d3858cef04f87be4016bca2d1825748bf628e6e.tar.gz |
Bugzilla bug #70295: fixed a bug introduced by my previous fix.
Modified files: prfile.c, ptio.c
(NSPRPUB_RELEASE_4_1_BRANCH)
-rw-r--r-- | pr/src/io/prfile.c | 10 | ||||
-rw-r--r-- | pr/src/pthreads/ptio.c | 11 |
2 files changed, 8 insertions, 13 deletions
diff --git a/pr/src/io/prfile.c b/pr/src/io/prfile.c index e1932307..aa1f4edc 100644 --- a/pr/src/io/prfile.c +++ b/pr/src/io/prfile.c @@ -633,18 +633,16 @@ PR_IMPLEMENT(PRStatus) PR_LockFile(PRFileDesc *fd) #endif PR_Lock(_pr_flock_lock); + while (fd->secret->lockCount == -1) + PR_WaitCondVar(_pr_flock_cv, PR_INTERVAL_NO_TIMEOUT); if (fd->secret->lockCount == 0) { fd->secret->lockCount == -1; PR_Unlock(_pr_flock_lock); status = _PR_MD_LOCKFILE(fd->secret->md.osfd); PR_Lock(_pr_flock_lock); - if (status == PR_SUCCESS) { - fd->secret->lockCount = 1; - PR_NotifyAllCondVar(_pr_flock_cv); - } + fd->secret->lockCount = (status == PR_SUCCESS) ? 1 : 0; + PR_NotifyAllCondVar(_pr_flock_cv); } else { - while (fd->secret->lockCount == -1) - PR_WaitCondVar(_pr_flock_cv, PR_INTERVAL_NO_TIMEOUT); fd->secret->lockCount++; } PR_Unlock(_pr_flock_lock); diff --git a/pr/src/pthreads/ptio.c b/pr/src/pthreads/ptio.c index 121be8d6..5dd54b09 100644 --- a/pr/src/pthreads/ptio.c +++ b/pr/src/pthreads/ptio.c @@ -4163,22 +4163,19 @@ PR_IMPLEMENT(PRStatus) PR_LockFile(PRFileDesc *fd) if (pt_TestAbort()) return PR_FAILURE; PR_Lock(_pr_flock_lock); + while (-1 == fd->secret->lockCount) + PR_WaitCondVar(_pr_flock_cv, PR_INTERVAL_NO_TIMEOUT); if (0 == fd->secret->lockCount) { fd->secret->lockCount = -1; PR_Unlock(_pr_flock_lock); status = _PR_MD_LOCKFILE(fd->secret->md.osfd); PR_Lock(_pr_flock_lock); - if (PR_SUCCESS == status) - { - fd->secret->lockCount = 1; - PR_NotifyAllCondVar(_pr_flock_cv); - } + fd->secret->lockCount = (PR_SUCCESS == status) ? 1 : 0; + PR_NotifyAllCondVar(_pr_flock_cv); } else { - while (-1 == fd->secret->lockCount) - PR_WaitCondVar(_pr_flock_cv, PR_INTERVAL_NO_TIMEOUT); fd->secret->lockCount += 1; } PR_Unlock(_pr_flock_lock); |