xivdev / Penumbra

FINAL FANTASY XIV modding, but actually good this time
650 stars 122 forks source link

ParallelOptions.MaxDegreeOfParallelism set to invalid value #317

Closed sersorrel closed 1 year ago

sersorrel commented 1 year ago

hey, I was looking at my Dalamud logs for an unrelated issue and noticed a weird exception from Penumbra:

2023-06-26 14:50:17.134 +01:00 [INF] [LOCALPLUGIN] Loading Penumbra.dll
2023-06-26 14:50:17.216 +01:00 [INF] [Penumbra] Loading Penumbra Version 0.7.1.4, Commit #81891cf with Waiting For Plugins: True...
2023-06-26 14:50:17.493 +01:00 [ERR] [Penumbra] Error constructing Penumbra, Disposing again:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter 'MaxDegreeOfParallelism')
   at System.Threading.Tasks.ParallelOptions.set_MaxDegreeOfParallelism(Int32 value)
   at Penumbra.Mods.Manager.ModManager.ScanMods() in D:\a\Penumbra\Penumbra\Penumbra\Mods\Manager\ModManager.cs:line 319
   at Penumbra.Mods.Manager.ModManager.DiscoverMods() in D:\a\Penumbra\Penumbra\Penumbra\Mods\Manager\ModManager.cs:line 77
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.ConstructorInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)
   at System.Reflection.RuntimeConstructorInfo.InvokeWithManyArguments(RuntimeConstructorInfo ci, Int32 argCount, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Penumbra.Penumbra..ctor(DalamudPluginInterface pluginInterface) in D:\a\Penumbra\Penumbra\Penumbra\Penumbra.cs:line 69

If I had to guess, I'd assume that Environment.ProcessorCount is 1 for some reason (maybe https://github.com/dotnet/runtime/issues/12727 regressed again??), and dividing it by 2 is rounding it down to 0, which is apparently not a valid value for ParallelOptions.MaxDegreeOfParallelism.

Ottermandias commented 1 year ago

Weird. Gonna max(1,...) it, thanks!