[IronPython] import thread-safety
Kamil Dworakowski
kamil at dworakowski.name
Wed Mar 11 11:51:35 CET 2009
issue added: http://ironpython.codeplex.com/WorkItem/View.aspx?WorkItemId=21574
Please back port it if it is not much trouble.
On Mar 10, 6:21 pm, Dino Viehland <di... at microsoft.com> wrote:
> This is fixed in 2.6 and we can backport the fix to 2.0. Could you open a bug on CodePlex? If you want to add the fix locally you just need to add the lock statement below to NewTypeMaker.StoreOverriddenMethods:
>
> lock(PythonTypeOps._functions) {
> foreach (BuiltinFunction bf in PythonTypeOps._functions.Values) {
> if (bf.Name == pythonName && bf.DeclaringType == declType) {
> bf.AddMethod(mi);
> break;
> }
> }
> }
>
>
>
> > -----Original Message-----
> > From: users-boun... at lists.ironpython.com [mailto:users-
> > boun... at lists.ironpython.com] On Behalf Of Kamil Dworakowski
> > Sent: Tuesday, March 10, 2009 11:08 AM
> > To: us... at lists.ironpython.com
> > Subject: [IronPython] import thread-safety
>
> > Hello,
>
> > I tried reactivate parallel importing in Resolver One. More info in
> > this thread from October:
> >http://groups.google.com/group/ironpy/browse_thread/thread/11c5c917d716
> > b7cc/58ce4e4260c2773a?lnk=gst&q=parallel+import#58ce4e4260c2773a
>
> > I hit a problem. Sometimes during importing I get the following
> > exception. It is a bit of a haisenbug because whenever I try to add
> > some diagnostics Resolver One starts fine.
>
> > CLS Exception: System.InvalidOperationException: Collection was
> > modified; enumeration operation may not execute.
> > at System.ThrowHelper.ThrowInvalidOperationException
> > (ExceptionResource resource)
> > at
> > System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.Move
> > Next
> > ()
> > at IronPython.Runtime.Types.NewTypeMaker.StoreOverriddenMethod
> > (MethodInfo mi, String newName)
> > at IronPython.Runtime.Types.NewTypeMaker.AddBaseMethods(Type
> > finishedType, Dictionary`2 specialNames)
> > at IronPython.Runtime.Types.NewTypeMaker.CreateNewType()
> > at
> > IronPython.Runtime.Types.NewTypeMaker.<>c__DisplayClass1.<GetNewType>b_
> > _0
> > ()
> > at Microsoft.Scripting.Utils.Publisher`2.GetOrCreateValue(TKey key,
> > Func`1 create)
> > at IronPython.Runtime.Types.NewTypeMaker.GetNewType(String
> > typeName, PythonTuple bases, IAttributesCollection dict)
> > at IronPython.Runtime.Types.PythonType..ctor(CodeContext context,
> > String name, PythonTuple bases, IAttributesCollection dict)
> > at IronPython.Runtime.Types.PythonType.__new__(CodeContext context,
> > PythonType cls, String name, PythonTuple bases, IAttributesCollection
> > dict)
> > at _stub_$270##128(Closure , CallSite , CodeContext , Object ,
> > String , PythonTuple , IAttributesCollection )
> > at IronPython.Runtime.Operations.PythonOps.MakeClass(CodeContext
> > context, String name, Object[] bases, String selfNames,
> > IAttributesCollection vars)
> > at IronPython.Runtime.Operations.PythonOps.MakeClass(CodeContext
> > context, String name, Object[] bases, String selfNames, CallTarget0
> > body)
> > at DLRCachedCode.Main\RenameWorksheetTextBoxAdaptor(Scope $scope,
> > LanguageContext $language)
> > at Microsoft.Scripting.ScriptCode.InvokeTarget(LambdaExpression
> > code, Scope scope)
> > at Microsoft.Scripting.ScriptCode.Run(Scope scope)
> > at IronPython.Runtime.PythonContext.CreateModule(String fileName,
> > Scope scope, ScriptCode scriptCode, ModuleOptions options)
> > at IronPython.Runtime.ModuleLoader.load_module(CodeContext context,
> > String fullName)
> > at _stub_$367##225(Closure , CallSite , CodeContext , Object ,
> > Object[] )
> > at IronPython.Runtime.PythonContext.Call(Object func, Object[]
> > args)
> > at IronPython.Runtime.Importer.FindAndLoadModuleFromImporter
> > (CodeContext context, Object importer, String fullName, List path,
> > Object& ret)
> > at IronPython.Runtime.Importer.TryLoadMetaPathModule(CodeContext
> > context, String fullName, List path, Object& ret)
> > at IronPython.Runtime.Importer.TryGetExistingOrMetaPathModule
> > (CodeContext context, String fullName, List path, Object& ret)
> > at IronPython.Runtime.Importer.ImportNestedModule(CodeContext
> > context, Scope scope, String name, List path)
> > at IronPython.Runtime.Importer.ImportModuleFrom(CodeContext
> > context, Object from, String name)
> > at IronPython.Runtime.Importer.ImportModule(CodeContext context,
> > Object globals, String modName, Boolean bottom, Int32 level)
> > at IronPython.Runtime.Builtin.__import__(CodeContext context,
> > String name, Object globals, Object locals, Object fromlist, Int32
> > level)
> > at IronPython.Runtime.Builtin.__import__(CodeContext context,
> > String name)
> > at _stub_$548##406(Closure , CallSite , CodeContext , Object ,
> > Object )
> > at DLRCachedCode.worker$736(Closure )
> > CLS Stack trace:
>
> > at System.ThrowHelper.ThrowInvalidOperationException
> > (ExceptionResource resource)
> > at
> > System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.Move
> > Next
> > ()
> > at IronPython.Runtime.Types.NewTypeMaker.StoreOverriddenMethod
> > (MethodInfo mi, String newName)
> > at IronPython.Runtime.Types.NewTypeMaker.AddBaseMethods(Type
> > finishedType, Dictionary`2 specialNames)
> > at IronPython.Runtime.Types.NewTypeMaker.CreateNewType()
> > at
> > IronPython.Runtime.Types.NewTypeMaker.<>c__DisplayClass1.<GetNewType>b_
> > _0
> > ()
> > at Microsoft.Scripting.Utils.Publisher`2.GetOrCreateValue(TKey key,
> > Func`1 create)
> > at IronPython.Runtime.Types.NewTypeMaker.GetNewType(String
> > typeName, PythonTuple bases, IAttributesCollection dict)
> > at IronPython.Runtime.Types.PythonType..ctor(CodeContext context,
> > String name, PythonTuple bases, IAttributesCollection dict)
> > at IronPython.Runtime.Types.PythonType.__new__(CodeContext context,
> > PythonType cls, String name, PythonTuple bases, IAttributesCollection
> > dict)
> > at _stub_$270##128(Closure , CallSite , CodeContext , Object ,
> > String , PythonTuple , IAttributesCollection )
> > at IronPython.Runtime.Operations.PythonOps.MakeClass(CodeContext
> > context, String name, Object[] bases, String selfNames,
> > IAttributesCollection vars)
> > at IronPython.Runtime.Operations.PythonOps.MakeClass(CodeContext
> > context, String name, Object[] bases, String selfNames, CallTarget0
> > body)
> > at DLRCachedCode.Main\RenameWorksheetTextBoxAdaptor(Scope $scope,
> > LanguageContext $language)
> > at Microsoft.Scripting.ScriptCode.InvokeTarget(LambdaExpression
> > code, Scope scope)
> > at Microsoft.Scripting.ScriptCode.Run(Scope scope)
> > at IronPython.Runtime.PythonContext.CreateModule(String fileName,
> > Scope scope, ScriptCode scriptCode, ModuleOptions options)
> > at IronPython.Runtime.ModuleLoader.load_module(CodeContext context,
> > String fullName)
> > at _stub_$367##225(Closure , CallSite , CodeContext , Object ,
> > Object[] )
> > at IronPython.Runtime.PythonContext.Call(Object func, Object[]
> > args)
> > at IronPython.Runtime.Importer.FindAndLoadModuleFromImporter
> > (CodeContext context, Object importer, String fullName, List path,
> > Object& ret)
> > at IronPython.Runtime.Importer.TryLoadMetaPathModule(CodeContext
> > context, String fullName, List path, Object& ret)
> > at IronPython.Runtime.Importer.TryGetExistingOrMetaPathModule
> > (CodeContext context, String fullName, List path, Object& ret)
> > at IronPython.Runtime.Importer.ImportNestedModule(CodeContext
> > context, Scope scope, String name, List path)
> > at IronPython.Runtime.Importer.ImportModuleFrom(CodeContext
> > context, Object from, String name)
> > at IronPython.Runtime.Importer.ImportModule(CodeContext context,
> > Object globals, String modName, Boolean bottom, Int32 level)
> > at IronPython.Runtime.Builtin.__import__(CodeContext context,
> > String name, Object globals, Object locals, Object fromlist, Int32
> > level)
> > at IronPython.Runtime.Builtin.__import__(CodeContext context,
> > String name)
> > at _stub_$548##406(Closure , CallSite , CodeContext , Object ,
> > Object )
> > at DLRCachedCode.worker$736(Closure )
>
> > _______________________________________________
> > Users mailing list
> > Us... at lists.ironpython.com
> >http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
> _______________________________________________
> Users mailing list
> Us... at lists.ironpython.comhttp://lists.ironpython.com/listinfo.cgi/users-ironpython.com
More information about the Ironpython-users
mailing list