OpenAFS Master Repository branch, openafs-devel-1_7_x, updated. openafs-devel-1_7_4-67-gbf42eac
Gerrit Code Review
gerrit@openafs.org
Thu, 19 Jan 2012 23:04:35 -0800 (PST)
The following commit has been merged in the openafs-devel-1_7_x branch:
commit bf42eac1f7874abf3092b358a6b4c4320c4a0353
Author: Jeffrey Altman <jaltman@your-file-system.com>
Date: Thu Jan 19 15:25:44 2012 -0500
Windows: cm_buf refcnt must hold buf_globalLock
An assertion in buf_Recycle() was being triggered when a cm_buf_t
object was supposed to be in the free buffer list but wasn't.
buf_Recycle() was racing with another thread. The test for
refCount == 0 was performed while holding the buf_globalLock
exclusively but the InterlockedDecrement(refCount) in buf_Release()
was performed without holding buf_globalLock at all. buf_globalLOck
must be held at least as a read lock. Otherwise, the refCount can
reach 0 prior to the thread blocking for exclusive access to the
buf_globalLock. This provides buf_Recycle() which is holding
buf_globalLock the opportunity to race.
The solution is to make sure that buf_Release() always holds
buf_globalLock as a read lock and then use buf_ReleaseLocked()
to perform the actual decrement and test.
Reviewed-on: http://gerrit.openafs.org/6576
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>
(cherry picked from commit 22cba8e9702f3673c335bf834a9ee2c5e5fd9b6e)
Change-Id: Id68d40f6c62c10630af0a5167d7e4d42b2812f77
Reviewed-on: http://gerrit.openafs.org/6589
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
src/WINNT/afsd/cm_buf.c | 31 +++----------------------------
1 files changed, 3 insertions(+), 28 deletions(-)
--
OpenAFS Master Repository