Unlocking thread not owner deadlock from an Ajax Updating Container
Unlocking thread not owner deadlock from an Ajax Updating Container
- Subject: Unlocking thread not owner deadlock from an Ajax Updating Container
- From: Paul Stringer <email@hidden>
- Date: Thu, 18 Dec 2008 13:17:47 +0000
Hi all, I'm encountering a deadlock situation when using an Ajax
Update container which triggers the exception and stacktrace below.
I'm wondering if it's been encountered before and if someone could
point to where I might be going wrong and possible causes.
It appears to come fairly consistently from a worepetition on the page
reading from a Entity.toManyRelationship along with no doubt some
other strange convergence of factors. This happens fairly
intermittently and haven't been able to reproduce and only generally
see after many hours usage although that's no always the case.
An exception has been caught by the Application class' exception handler
java.lang.IllegalStateException: Illegal Lock usage: unlocking thread
not owner.
at
com.webobjects.foundation.NSRecursiveLock.unlock(NSRecursiveLock.java:
207)
at
com
.webobjects
.eocontrol
.EOObjectStoreCoordinator.unlock(EOObjectStoreCoordinator.java:504)
at
com
.webobjects
.eocontrol.EOEditingContext.unlockObjectStore(EOEditingContext.java:
4753)
at
com
.webobjects
.eocontrol.EOCustomObject.willReadRelationship(EOCustomObject.java:1304)
at
er
.extensions
.eof.ERXGenericRecord.willReadRelationship(ERXGenericRecord.java:349)
at com.webobjects.eocontrol._EOMutableKnownKeyDictionary$Initializer
$
_LazyGenericRecordBinding
.valueInObject(_EOMutableKnownKeyDictionary.java:560)
at
com
.webobjects
.eocontrol.EOCustomObject.storedValueForKey(EOCustomObject.java:1736)
at com.kisky.treasuremytext.eo._User.folders(_User.java:763)
---> at com.kisky.treasuremytext.eo.User.filteredFolders(User.java:
977) <-- In here are NSMutableArrays and
ERXArrayUtilities.filteredArrayWithQualifierEvaluation
at sun.reflect.GeneratedMethodAccessor175.invoke(Unknown Source)
at
sun
.reflect
.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.webobjects.foundation.NSKeyValueCoding$ValueAccessor
$1.methodValue(NSKeyValueCoding.java:684)
at com.webobjects.foundation.NSKeyValueCoding
$_MethodBinding.valueInObject(NSKeyValueCoding.java:1160)
at
com
.webobjects.eocontrol.EOCustomObject.valueForKey(EOCustomObject.java:
1559)
at com.webobjects.foundation.NSKeyValueCoding
$Utility.valueForKey(NSKeyValueCoding.java:498)
at com.webobjects.foundation.NSKeyValueCodingAdditions
$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:
216)
at
com
.webobjects
.eocontrol.EOCustomObject.valueForKeyPath(EOCustomObject.java:1675)
at com.webobjects.foundation.NSKeyValueCodingAdditions
$Utility.valueForKeyPath(NSKeyValueCodingAdditions.java:149)
at com.webobjects.foundation.NSKeyValueCodingAdditions
$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:
217)
at
com.webobjects.appserver.WOComponent.valueForKeyPath(WOComponent.java:
1600)
at
com
.webobjects
.appserver
._private
.WOKeyValueAssociation.valueInComponent(WOKeyValueAssociation.java:46)
at
er
.extensions
.components
._private.ERXWORepetition.createContext(ERXWORepetition.java:334)
at
er
.extensions
.components._private.ERXWORepetition.invokeAction(ERXWORepetition.java:
367)
at
com
.webobjects
.appserver
._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:101)
at
com
.webobjects
.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:110)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:
945)
at
er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:93)
at
com
.webobjects
.appserver
._private.WOComponentReference.invokeAction(WOComponentReference.java:
104)
at
com
.webobjects
.appserver
._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:101)
at
er
.extensions
.components
.conditionals
.ERXWOConditional.invokeChildrenAction(ERXWOConditional.java:111)
at
com
.webobjects
.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:110)
at
er
.extensions
.components
.conditionals.ERXWOConditional.invokeAction(ERXWOConditional.java:102)
at
com
.webobjects
.appserver
._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:101)
at
com
.webobjects
.appserver
._private.WOGenericContainer.invokeAction(WOGenericContainer.java:23)
at
com
.webobjects
.appserver
._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:101)
at
com
.webobjects
.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:110)
at
com
.webobjects
.appserver
._private.WOComponentContent.invokeAction(WOComponentContent.java:31)
at
com
.webobjects
.appserver
._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:101)
at
com
.webobjects
.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:110)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:
945)
at
com
.webobjects
.appserver
._private.WOComponentReference.invokeAction(WOComponentReference.java:
104)
at
com
.webobjects
.appserver
._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:101)
at
com
.webobjects
.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:110)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:
945)
at
com
.webobjects
.appserver
._private.WOComponentReference.invokeAction(WOComponentReference.java:
104)
at
com
.webobjects
.appserver
._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:101)
at
com
.webobjects
.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:110)
at com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:
945)
at com.webobjects.appserver.WOSession.invokeAction(WOSession.java:1168)
at
com.webobjects.appserver.WOApplication.invokeAction(WOApplication.java:
1375)
at
er
.extensions
.appserver
.ajax.ERXAjaxApplication.invokeAction(ERXAjaxApplication.java:48)
at
er
.extensions.appserver.ERXApplication.invokeAction(ERXApplication.java:
1539)
at
com
.webobjects
.appserver
._private
.WOComponentRequestHandler
._dispatchWithPreparedPage(WOComponentRequestHandler.java:196)
at
com
.webobjects
.appserver
._private
.WOComponentRequestHandler
._dispatchWithPreparedSession(WOComponentRequestHandler.java:287)
at
com
.webobjects
.appserver
._private
.WOComponentRequestHandler
._dispatchWithPreparedApplication(WOComponentRequestHandler.java:322)
at
com
.webobjects
.appserver
._private
.WOComponentRequestHandler
._handleRequest(WOComponentRequestHandler.java:358)
at
com
.webobjects
.appserver
._private
.WOComponentRequestHandler
.handleRequest(WOComponentRequestHandler.java:435)
at er.ajax.AjaxRequestHandler.handleRequest(AjaxRequestHandler.java:17)
at
com
.webobjects.appserver.WOApplication.dispatchRequest(WOApplication.java:
1306)
at
er
.extensions
.appserver
.ERXApplication.dispatchRequestImmediately(ERXApplication.java:1656)
at
er
.extensions
.appserver.ERXApplication.dispatchRequest(ERXApplication.java:1620)
at
com
.webobjects
.appserver._private.WOWorkerThread.runOnce(WOWorkerThread.java:173)
at
com
.webobjects.appserver._private.WOWorkerThread.run(WOWorkerThread.java:
254)
at java.lang.Thread.run(Thread.java:613)
In there is a filteredFolders() method which is using NSMutableArrays
and ERXArrayUtilities.filteredArrayWithQualifierEvaluation to qualify
the folders() objects.
I'm pretty sure I have nothing else happening in any of my own self
created threads. I've disabled concurrent request handling.
EditingContexts are created from ERXEC.newEditingContext() with one
tied to each user session . I'm not using defaultEditingContext() and
have ERXECs autolocking turned on. I am using a shared editing context
for some read only stuff elsewhere in the app.
Thanks
Paul S
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden