Wow - thats a _really_ nice idea.

j.

On Fri, Jan 9, 2009 at 12:10 PM, hammett <[email protected]> wrote:
>
> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to