[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