fix GC killing rcheevo callbacks
This commit is contained in:
parent
c4f2bed9fd
commit
cf0ce0f5bb
|
@ -53,7 +53,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (RichPresenceActive)
|
||||
{
|
||||
var len = _lib.rc_runtime_get_richpresence(ref _runtime, _richPresenceBuffer, _richPresenceBuffer.Length, PeekCallback, IntPtr.Zero, IntPtr.Zero);
|
||||
var len = _lib.rc_runtime_get_richpresence(ref _runtime, _richPresenceBuffer, _richPresenceBuffer.Length, _peekcb, IntPtr.Zero, IntPtr.Zero);
|
||||
CurrentRichPresence = Encoding.UTF8.GetString(_richPresenceBuffer, 0, len);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -25,6 +25,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private LibRCheevos.rc_runtime_t _runtime;
|
||||
|
||||
private readonly LibRCheevos.rc_runtime_event_handler_t _eventcb;
|
||||
private readonly LibRCheevos.rc_peek_t _peekcb;
|
||||
|
||||
private readonly Dictionary<int, (ReadMemoryFunc Func, int Start)> _readMap = new();
|
||||
|
||||
private ToolStripMenuItem _hardcoreModeMenuItem;
|
||||
|
@ -195,6 +198,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
Login();
|
||||
InitLoginDone.WaitOne();
|
||||
|
||||
_eventcb = EventHandlerCallback;
|
||||
_peekcb = PeekCallback;
|
||||
|
||||
var config = _getConfig();
|
||||
CheevosActive = config.RACheevosActive;
|
||||
LBoardsActive = config.RALBoardsActive;
|
||||
|
@ -385,7 +391,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
|
||||
// validate addresses now that we have cheevos init
|
||||
_lib.rc_runtime_validate_addresses(ref _runtime, EventHandlerCallback, address => _readMap.ContainsKey(address));
|
||||
// ReSharper disable once ConvertToLocalFunction
|
||||
LibRCheevos.rc_runtime_validate_address_t peekcb = address => _readMap.ContainsKey(address);
|
||||
_lib.rc_runtime_validate_addresses(ref _runtime, _eventcb, peekcb);
|
||||
|
||||
_gameInfoForm.Restart(_gameData.Title, _gameData.TotalCheevoPoints(HardcoreMode), CurrentRichPresence ?? "N/A");
|
||||
_cheevoListForm.Restart(_gameData.GameID == 0 ? Array.Empty<Cheevo>() : _gameData.CheevoEnumerable, GetCheevoProgress);
|
||||
|
@ -600,12 +608,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
// we want to EnterExit to prevent wbx host spam when peeks are spammed
|
||||
using (Domains.MainMemory.EnterExit())
|
||||
{
|
||||
_lib.rc_runtime_do_frame(ref _runtime, EventHandlerCallback, PeekCallback, IntPtr.Zero, IntPtr.Zero);
|
||||
_lib.rc_runtime_do_frame(ref _runtime, _eventcb, _peekcb, IntPtr.Zero, IntPtr.Zero);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_lib.rc_runtime_do_frame(ref _runtime, EventHandlerCallback, PeekCallback, IntPtr.Zero, IntPtr.Zero);
|
||||
_lib.rc_runtime_do_frame(ref _runtime, _eventcb, _peekcb, IntPtr.Zero, IntPtr.Zero);
|
||||
}
|
||||
|
||||
if (_gameInfoForm.IsShown)
|
||||
|
|
Loading…
Reference in New Issue