Release boot session data during Netplay cleanup

Boot session data is already handled when the game is booted so this is just fallback in case the game launch fails in some weird way.

Add missing @Keep annotations to functions called from C++
This commit is contained in:
Tom Pratt 2026-04-23 15:25:07 +02:00
parent ee1271e5b2
commit 05cfd16665
2 changed files with 25 additions and 2 deletions

View File

@ -27,8 +27,6 @@ import org.dolphinemu.dolphinemu.features.netplay.model.ConnectionType
import org.dolphinemu.dolphinemu.features.netplay.model.NetplayMessage
import org.dolphinemu.dolphinemu.features.netplay.model.Player
//TODO add other necessary @Keep annotations
//TODO clear boot session data at appropriate time
object Netplay {
@Keep
private var netPlayClientPointer: Long = 0
@ -123,6 +121,11 @@ object Netplay {
sessionScope?.cancel()
sessionScope = null
if (bootSessionDataPointer != 0L) {
ReleaseBootSessionData()
bootSessionDataPointer = 0
}
if (netPlayClientPointer != 0L) {
ReleaseNetplayClient()
netPlayClientPointer = 0
@ -158,6 +161,9 @@ object Netplay {
@JvmStatic
external fun adjustPadBufferSize(buffer: Int)
@JvmStatic
private external fun ReleaseBootSessionData()
@JvmStatic
private external fun ReleaseNetplayClient()
@ -170,6 +176,7 @@ object Netplay {
// NetPlayUI callbacks
@Keep
@JvmStatic
fun onBootGame(gameFilePath: String, bootSessionDataPointer: Long) {
this.bootSessionDataPointer = bootSessionDataPointer
@ -189,31 +196,37 @@ object Netplay {
_connectionLost.trySend(Unit)
}
@Keep
@JvmStatic
fun onConnectionError(message: String) {
_connectionErrors.trySend(message)
}
@Keep
@JvmStatic
fun onUpdate(players: Array<Player>) {
_players.tryEmit(players.toList())
}
@Keep
@JvmStatic
fun onChatMessageReceived(message: String) {
_chatMessages.tryEmit(message)
}
@Keep
@JvmStatic
fun onHostInputAuthorityChanged(enabled: Boolean) {
_hostInputAuthorityEnabled.tryEmit(enabled)
}
@Keep
@JvmStatic
fun onGameChanged(game: String) {
_game.tryEmit(game)
}
@Keep
@JvmStatic
fun onPadBufferChanged(buffer: Int) {
// Only for remote pad buffer settings. Ignore local max buffer changes.

View File

@ -8,6 +8,7 @@
#include <jni.h>
#include "Common/CommonTypes.h"
#include "Core/Boot/Boot.h"
#include "Core/Config/NetplaySettings.h"
#include "Core/NetPlayClient.h"
#include "UICommon/GameFile.h"
@ -166,6 +167,15 @@ Java_org_dolphinemu_dolphinemu_features_netplay_Netplay_Join(JNIEnv* env, jclass
return reinterpret_cast<jlong>(client);
}
JNIEXPORT void JNICALL
Java_org_dolphinemu_dolphinemu_features_netplay_Netplay_ReleaseBootSessionData(JNIEnv* env, jclass)
{
auto* data = reinterpret_cast<BootSessionData*>(
env->GetStaticLongField(IDCache::GetNetplayClass(), IDCache::GetNetplayBootSessionDataPointer()));
delete data;
env->SetStaticLongField(IDCache::GetNetplayClass(), IDCache::GetNetplayBootSessionDataPointer(), 0);
}
JNIEXPORT void JNICALL
Java_org_dolphinemu_dolphinemu_features_netplay_Netplay_ReleaseNetplayClient(JNIEnv* env, jclass)
{