CDV ❯ ReentrantReadWriteLock fails in Spring configuration
-
Bug
-
Status: Closed
-
2 Major
-
Resolution: Fixed
-
-
-
hhuynh
-
Reporter:
-
October 11, 2007
-
0
-
Watchers: 2
-
October 29, 2007
-
October 23, 2007
Attachments
Description
Refer to forum post
http://forums.terracotta.org/forums/posts/list/0/521.page
This is a problem with Spring enabled configuration. Find attached the code to reproduce it.
It is a bug with RenetrantReadWriteLock instrumentation. dsoLock is defined as transient inside ReentrantReadWriteLockTC.WriteLock and ReentrantReadWriteLockTC.ReadLock, but while instrumenting honorTransient is not set true. So in DSO configuration, dsoLock object is still shared by terracotta.
Somehow with Spring configuration, transient is honored and dsoLock object is not shared with terracotta and while dehyderating the ReentrantReadWriteLock inside another JVM, it fails with nullpointer exception as dsoLock is null.
ideally dsoLock object should not be transient. I tested by removing transient keyword for dsoLock and it works fine. Attached is the modified ReentrantReadWriteLockTC code that makes it work
Comments
Steve Harris 2007-10-13
njain 2007-10-15
Yeah, that should be the issue. But defining dsoLock as transient is not required in first place.
Eugene Kuleshov 2007-10-15
There is a class hierarchy walker that is responsible for automatically adding includes for classes referenced by the clustered Spring beans and it sets honor transient flag on those classes using DSOClientConfigHelper.addIncludeAndLockIfRequired(..) call
Though walker should be ignoring any classes that are included using
Eugene Kuleshov 2007-10-15
BTW, Nitin, you mentioned that issue is fixed in the nightly build. What was actually changed?
njain 2007-10-16
Eugene, some miscommunication here. In my opionion problem is yet to be fixed
Eugene Kuleshov 2007-10-16
I am just asking if any fix been actually pushed to the nightly build. Isn’t that your comment? http://forums.terracotta.org/forums/posts/list/521.page#2873
PS: please set “viewable by” field when replying if you don’t want comment to be visible to everyone.
njain 2007-10-17
I intended to say that it will be fixed soon and made available in nightly build. Nothing is fixed yet. May be I should not have made this statement without confirmation from Engineering.
Antonio Si 2007-10-23
dsoLock is transient so that a serialized TC version of ReentrantReadWriteLock could be de-serialized into a non-TC environment.
This issue is fixed by not adding to the include pattern if the class already has a spec for it in the StandardDsoClientConfig.
I think I might remember spring having a default of honor transient true while the rest of dso had it false. I wonder if that is the cause of this issue?