Invoke function is broken
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 55/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- csharp
調査の方向性
ViewImplementationBase.Invoke から開始し、DoInvokes と DoRender を経由するレンダリングパスを追跡して、x.ResetEvent.Reset() の null 参照に焦点を当てます。提供された初期化を使用して、報告されたバックグラウンドスレッドからの Invoke のケースを再現し、メインスレッドのレンダリングループとタスクが NullReferenceException なしで完了することを確認します。
索引モデルが issue の本文から書いたものです。
説明
Summary
When trying to use the Invoke function from IView i receive an error message.
Steps to reproduce
- Platform: Desktop
- Framework Version: .NET 10
- Silk.NET Version: 2.23.0
- API: OpenGL
- API Version: OpenGL 4.6 Core
Initiation:
var initOptions = WindowOptions.Default with
{
IsVisible = false,
VSync = false,
Size = new(1280, 720),
API = new GraphicsAPI
{
API = ContextAPI.OpenGL,
Profile = ContextProfile.Compatability,
Flags = ContextFlags.ForwardCompatible,
Version = new APIVersion(4, 6)
},
FramesPerSecond = 60
};
Issue
Code
Task.Run(() =>
{
Thread.Sleep(100);
Window.Main.MeGLFW.Invoke(() => Console.WriteLine("error"));
});
Errors
On the main Thread:
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
at Silk.NET.Windowing.Internals.ViewImplementationBase.DoInvokes()
at Silk.NET.Windowing.Internals.ViewImplementationBase.DoRender()
at Silk.NET.Windowing.WindowExtensions.<>c__DisplayClass2_0.<Run>b__0()
at Silk.NET.Windowing.Internals.ViewImplementationBase.Run(Action onFrame)
at Silk.NET.Windowing.Glfw.GlfwWindow.Run(Action onFrame)
at Silk.NET.Windowing.WindowExtensions.Run(IView view)
at /* My App Init */
And in the Task:
System.NullReferenceException: Object reference not set to an instance of an object.
at Silk.NET.Windowing.Internals.ViewImplementationBase.Invoke(Delegate d, Object[] args)
at /* Task.Run() */
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
public object Invoke(Delegate d, params object[] args)
{
var rentalIndex = Interlocked.Increment(ref _rented) - 1;
EnsureArrayIsReady(rentalIndex);
ref var x = ref _pendingInvocations![rentalIndex];
x.Delegate = d;
x.Data = args;
x.ResetEvent.Reset(); // <- Here
x.IsComplete = false;
x.ResetEvent.Wait();
var ret = x.Data[0];
_returnArrayPool.Return(x.Data);
x.Delegate = null;
x.Data = null;
return ret;
}
- 主要言語
- C#
- スター
- 5.2k
- フォーク
- 480
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
dotnet/Silk.NET のほかの issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
-
bug good first issue verify-3.0
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
-
bug verify-3.0
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
dotnet/Silk.NET の issue をすべて見る
似ている issue
-
Bug pulumi/pulumi
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
activescott/lessmsi#306 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
HTML sitemap lists unpublished pages対応中かも @KrzysztofPajak が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
grandnode/grandnode2#883 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 1 日以内に返信