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 -~----------~----~----~----~------~----~------~--~---
