aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx/Program.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx/Program.cs')
-rw-r--r--Ryujinx/Program.cs17
1 files changed, 11 insertions, 6 deletions
diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs
index 36f379fc..4df82da6 100644
--- a/Ryujinx/Program.cs
+++ b/Ryujinx/Program.cs
@@ -1,6 +1,5 @@
using ARMeilleure.Translation.PTC;
using Gtk;
-using OpenTK;
using Ryujinx.Common.Configuration;
using Ryujinx.Common.Logging;
using Ryujinx.Common.System;
@@ -12,6 +11,7 @@ using Ryujinx.Ui.Widgets;
using System;
using System.IO;
using System.Reflection;
+using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace Ryujinx
@@ -24,6 +24,9 @@ namespace Ryujinx
public static string ConfigurationPath { get; set; }
+ [DllImport("libX11")]
+ private extern static int XInitThreads();
+
static void Main(string[] args)
{
// Parse Arguments.
@@ -63,15 +66,17 @@ namespace Ryujinx
// Delete backup files after updating.
Task.Run(Updater.CleanupUpdate);
- Toolkit.Init(new ToolkitOptions
- {
- Backend = PlatformBackend.PreferNative
- });
-
Version = Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;
Console.Title = $"Ryujinx Console {Version}";
+ // NOTE: GTK3 doesn't init X11 in a multi threaded way.
+ // This ends up causing race condition and abort of XCB when a context is created by SPB (even if SPB do call XInitThreads).
+ if (OperatingSystem.IsLinux())
+ {
+ XInitThreads();
+ }
+
string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("Path", $"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")};{systemPath}");