News on this one. The mef dev lead (kevin) kindly took a look at this
one and spot the same thing.
It needs to be either ExitRead followed by a EnterWrite, or
UpgradeToWrite lock. He also suggested using wrappers so it wont bite
us again:
using (new ReadLock(_lock))
{
foundProxy = _proxies.TryGetValue(viewType, out proxyType);
}
// No factory exists
if(!foundProxy)
{
// Try again under a write lock if still none generate the proxy
using (new WriteLock(_lock))
{
foundProxy = _proxies.TryGetValue(viewType, out proxyType);
if (!foundProxy)
{
proxyType = GenerateInterfaceViewProxyType(viewType);
Assumes.NotNull(proxyType);
_proxies.Add(viewType, proxyType);
}
}
}
return proxyType;
}
On Wed, Jan 7, 2009 at 6:44 AM, Yuriy Ostapenko <[email protected]> wrote:
>
> I've inspected changes in ClassProxyGenerator and my guess is that new
> SlimReaderWriterLock.EnterWriteLock() is not equivalent to what
> ReaderWriterLock.UpgradeToWriterLock(-1) used to do.
>
> Thanks
>
> On Jan 7, 2:01 pm, Yuriy Ostapenko <[email protected]> wrote:
>> All Cassini worker threads end up looking this way:
>>
>> ~22e!clrstack
>> OS Thread Id: 0x348 (22)
>> ESP EIP
>> 096fcb54 7c90e4f4 [HelperMethodFrame_1OBJ: 096fcb54]
>> System.Threading.WaitHandle.WaitOneNative
>> (Microsoft.Win32.SafeHandles.SafeWaitHandle, UInt32, Boolean, Boolean)
>> 096fcc00 792b687f System.Threading.WaitHandle.WaitOne(Int64, Boolean)
>> 096fcc1c 792b6835 System.Threading.WaitHandle.WaitOne(Int32, Boolean)
>> 096fcc30 6c3544fc System.Threading.ReaderWriterLockSlim.WaitOnEvent
>> (System.Threading.EventWaitHandle, UInt32 ByRef, Int32)
>> 096fcc68 6c353eaf
>> System.Threading.ReaderWriterLockSlim.TryEnterUpgradeableReadLock
>> (Int32)
>> 096fcc84 6c353f48
>> System.Threading.ReaderWriterLockSlim.EnterUpgradeableReadLock()
>> 096fcc88 042ce104
>> Castle.Core.Internal.SlimReaderWriterLock.EnterReadLock()
>> 096fcc8c 06977f98
>> Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode
>> (System.Type[], Castle.DynamicProxy.ProxyGenerationOptions)
>> 096fce7c 06977f19
>> Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(System.Type,
>> System.Type[], Castle.DynamicProxy.ProxyGenerationOptions)
>> 096fce98 06977dab Castle.DynamicProxy.ProxyGenerator.CreateClassProxy
>> (System.Type, System.Type[],
>> Castle.DynamicProxy.ProxyGenerationOptions, System.Object[],
>> Castle.Core.Interceptor.IInterceptor[])
>> 096fcec0 06977d36 Castle.DynamicProxy.ProxyGenerator.CreateClassProxy
>> (System.Type, System.Type[], Castle.Core.Interceptor.IInterceptor[])
>> 096fcecc 06977a7d NHibernate.ByteCode.Castle.ProxyFactory.GetProxy
>> (System.Object, NHibernate.Engine.ISessionImplementor)
>> 096fcf1c 0697790b
>> NHibernate.Tuple.Entity.AbstractEntityTuplizer.CreateProxy
>> (System.Object, NHibernate.Engine.ISessionImplementor)
>> 096fcf2c 069778d6
>> NHibernate.Persister.Entity.AbstractEntityPersister.CreateProxy
>> (System.Object, NHibernate.Engine.ISessionImplementor)
>> 096fcf44 0697698b
>> NHibernate.Event.Default.DefaultLoadEventListener.CreateProxyIfNecessary
>> (NHibernate.Event.LoadEvent,
>> NHibernate.Persister.Entity.IEntityPersister,
>> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType,
>> NHibernate.Engine.IPersistenceContext)
>> 096fcf68 06974a89
>> NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad
>> (NHibernate.Event.LoadEvent,
>> NHibernate.Persister.Entity.IEntityPersister,
>> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
>> 096fcf98 0697485b
>> NHibernate.Event.Default.DefaultLoadEventListener.OnLoad
>> (NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
>> 096fcfd4 069746da NHibernate.Impl.SessionImpl.FireLoad
>> (NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
>> 096fcfec 06974185 NHibernate.Impl.SessionImpl.InternalLoad
>> (System.String, System.Object, Boolean, Boolean)
>> 096fd010 0697405b NHibernate.Type.EntityType.ResolveIdentifier
>> (System.Object, NHibernate.Engine.ISessionImplementor)
>> 096fd038 06973f65 NHibernate.Type.EntityType.ResolveIdentifier
>> (System.Object, NHibernate.Engine.ISessionImplementor, System.Object)
>> 096fd054 0697646b NHibernate.Engine.TwoPhaseLoad.InitializeEntity
>> (System.Object, Boolean, NHibernate.Engine.ISessionImplementor,
>> NHibernate.Event.PreLoadEvent, NHibernate.Event.PostLoadEvent)
>> 096fd0d0 06976272
>> NHibernate.Loader.Loader.InitializeEntitiesAndCollections
>> (System.Collections.IList, System.Object,
>> NHibernate.Engine.ISessionImplementor, Boolean)
>> 096fd104 064ccfe1 NHibernate.Loader.Loader.DoQuery
>> (NHibernate.Engine.ISessionImplementor,
>> NHibernate.Engine.QueryParameters, Boolean)
>> 096fd174 064ccc17
>> NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections
>> (NHibernate.Engine.ISessionImplementor,
>> NHibernate.Engine.QueryParameters, Boolean)
>> 096fd1ac 06dc8c17 NHibernate.Loader.Loader.LoadEntity
>> (NHibernate.Engine.ISessionImplementor, System.Object,
>> NHibernate.Type.IType, System.Object, System.String, System.Object,
>> NHibernate.Persister.Entity.IEntityPersister)
>> 096fd1f8 06dc8a5a NHibernate.Loader.Entity.AbstractEntityLoader.Load
>> (NHibernate.Engine.ISessionImplementor, System.Object, System.Object,
>> System.Object)
>> 096fd218 06dc8a23 NHibernate.Loader.Entity.AbstractEntityLoader.Load
>> (System.Object, System.Object, NHibernate.Engine.ISessionImplementor)
>> 096fd228 06dc88d0
>> NHibernate.Persister.Entity.AbstractEntityPersister.Load
>> (System.Object, System.Object, NHibernate.LockMode,
>> NHibernate.Engine.ISessionImplementor)
>> 096fd24c 06dc87de
>> NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource
>> (NHibernate.Event.LoadEvent,
>> NHibernate.Persister.Entity.IEntityPersister,
>> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
>> 096fd27c 06974e9d
>> NHibernate.Event.Default.DefaultLoadEventListener.DoLoad
>> (NHibernate.Event.LoadEvent,
>> NHibernate.Persister.Entity.IEntityPersister,
>> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
>> 096fd2b4 06974b77
>> NHibernate.Event.Default.DefaultLoadEventListener.Load
>> (NHibernate.Event.LoadEvent,
>> NHibernate.Persister.Entity.IEntityPersister,
>> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
>> 096fd2dc 06974a9b
>> NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad
>> (NHibernate.Event.LoadEvent,
>> NHibernate.Persister.Entity.IEntityPersister,
>> NHibernate.Engine.EntityKey, NHibernate.Event.LoadType)
>> 096fd30c 0697485b
>> NHibernate.Event.Default.DefaultLoadEventListener.OnLoad
>> (NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
>> 096fd348 069746da NHibernate.Impl.SessionImpl.FireLoad
>> (NHibernate.Event.LoadEvent, NHibernate.Event.LoadType)
>> 096fd360 06dc8500 NHibernate.Impl.SessionImpl.Get(System.String,
>> System.Object)
>> 096fd398 06dc848d NHibernate.Impl.SessionImpl.Get(System.Type,
>> System.Object)
>> 096fd3a8 06dc7d9f Castle.ActiveRecord.ActiveRecordBase.FindByPrimaryKey
>> (System.Type, System.Object, Boolean)
>> 096fd3f8 06dc7cfe Castle.ActiveRecord.ActiveRecordMediator`1
>> [[System.__Canon, mscorlib]].FindByPrimaryKey(System.Object, Boolean)
>> ...my code here...
>> 096fd76c 06980981 DynamicClass.lambda_method
>> (System.Runtime.CompilerServices.ExecutionScope,
>> System.Web.Mvc.ControllerBase, System.Object[])
>> 096fd778 036cad22 System.Web.Mvc.ActionMethodDispatcher.Execute
>> (System.Web.Mvc.ControllerBase, System.Object[])
>> 096fd784 036ca8c0
>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod
>> (System.Reflection.MethodInfo,
>> System.Collections.Generic.IDictionary`2<System.String,System.Object>)
>> 096fd7a4 036ca7d8 System.Web.Mvc.ControllerActionInvoker
>> +<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9()
>> 096fd7b8 036ca6c0
>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
>> (System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext,
>> System.Func`1<System.Web.Mvc.ActionExecutedContext>)
>> 096fd7f4 036ca62d System.Web.Mvc.ControllerActionInvoker
>> +<>c__DisplayClassc
>> +<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
>> 096fd7fc 036ca6c0
>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
>> (System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext,
>> System.Func`1<System.Web.Mvc.ActionExecutedContext>)
>> 096fd838 036ca62d System.Web.Mvc.ControllerActionInvoker
>> +<>c__DisplayClassc
>> +<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
>> 096fd840 036ca6c0
>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
>> (System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext,
>> System.Func`1<System.Web.Mvc.ActionExecutedContext>)
>> 096fd87c 036ca62d System.Web.Mvc.ControllerActionInvoker
>> +<>c__DisplayClassc
>> +<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
>> 096fd884 036ca6c0
>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter
>> (System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext,
>> System.Func`1<System.Web.Mvc.ActionExecutedContext>)
>> 096fd8c0 036ca62d System.Web.Mvc.ControllerActionInvoker
>> +<>c__DisplayClassc
>> +<>c__DisplayClasse.<InvokeActionMethodWithFilters>b__b()
>> 096fd8c8 036ca4b2
>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters
>> (System.Reflection.MethodInfo,
>> System.Collections.Generic.IDictionary`2<System.String,System.Object>,
>> System.Collections.Generic.IList`1<System.Web.Mvc.IActionFilter>)
>> 096fd8e8 036c9401 System.Web.Mvc.ControllerActionInvoker.InvokeAction
>> (System.Web.Mvc.ControllerContext, System.String)
>> 096fd92c 036c8e91 System.Web.Mvc.Controller.ExecuteCore()
>> 096fd958 036c8be8 System.Web.Mvc.ControllerBase.Execute
>> (System.Web.Routing.RequestContext)
>> 096fd964 036c8bb8
>> System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute
>> (System.Web.Routing.RequestContext)
>> 096fd96c 036c7fac System.Web.Mvc.MvcHandler.ProcessRequest
>> (System.Web.HttpContextBase)
>> 096fd9ac 036c7f28 System.Web.Mvc.MvcHandler.ProcessRequest
>> (System.Web.HttpContext)
>> 096fd9c0 036c7ee8
>> System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest
>> (System.Web.HttpContext)
>> 096fd9c8 660ad8f6 System.Web.HttpApplication
>> +CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute
>> ()
>> 096fd9fc 6608132c System.Web.HttpApplication.ExecuteStep
>> (IExecutionStep, Boolean ByRef)
>> 096fda3c 6608c3a3 System.Web.HttpApplication
>> +ApplicationStepManager.ResumeSteps(System.Exception)
>> 096fda8c 660808ac
>> System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest
>> (System.Web.HttpContext, System.AsyncCallback, System.Object)
>> 096fdaa8 66083e1c System.Web.HttpRuntime.ProcessRequestInternal
>> (System.Web.HttpWorkerRequest)
>> 096fdadc 66083ac3 System.Web.HttpRuntime.ProcessRequestNoDemand
>> (System.Web.HttpWorkerRequest)
>> 096fdaec 66654d17 System.Web.HttpRuntime.ProcessRequest
>> (System.Web.HttpWorkerRequest)
>> 096fdb00 036c37a9 Microsoft.VisualStudio.WebHost.Request.Process()
>> 096fdb18 036c344e Microsoft.VisualStudio.WebHost.Host.ProcessRequest
>> (Microsoft.VisualStudio.WebHost.Connection)
>> 096fdd64 79e71b4c [GCFrame: 096fdd64]
>> 096fdd80 79e71b4c [GCFrame: 096fdd80]
>> 096fdef4 79e71b4c [ContextTransitionFrame: 096fdef4]
>> 096fdfe8 79e71b4c [GCFrame: 096fdfe8]
>> 096fdfcc 79e71b4c [GCFrame: 096fdfcc]
>> 096ff24c 79e71b4c [CustomGCFrame: 096ff24c]
>> 096ff260 79e71b4c [CustomGCFrame: 096ff260]
>> 096ff274 79e71b4c ...
>>
>> read more »
> >
>
--
Cheers,
hammett
http://hammett.castleproject.org/
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Castle Project Development List" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/castle-project-devel?hl=en
-~----------~----~----~----~------~----~------~--~---