[IronPython] import thread-safety
Dino Viehland
dinov at microsoft.com
Tue Mar 10 19:21:37 CET 2009
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-bounces at lists.ironpython.com [mailto:users-
> bounces at lists.ironpython.com] On Behalf Of Kamil Dworakowski
> Sent: Tuesday, March 10, 2009 11:08 AM
> To: users 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
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
More information about the Ironpython-users
mailing list