Skip to content

Commit

Permalink
Android: Fix crash when using NetworkServiceDiscovery
Browse files Browse the repository at this point in the history
  • Loading branch information
szarvas committed Dec 18, 2023
1 parent 90c15c4 commit 6219eb9
Showing 1 changed file with 12 additions and 17 deletions.
29 changes: 12 additions & 17 deletions modules/juce_core/native/juce_Network_android.cpp
Expand Up @@ -212,30 +212,25 @@ DECLARE_JNI_CLASS (AndroidMulticastLock, "android/net/wifi/WifiManager$Multicast
DECLARE_JNI_CLASS (AndroidWifiManager, "android/net/wifi/WifiManager")
#undef JNI_CLASS_MEMBERS

static LocalRef<jobject> getMulticastLock()
static jobject getMulticastLock()
{
static LocalRef<jobject> multicastLock;
static bool hasChecked = false;

if (! hasChecked)
static GlobalRef multicastLock = [&]
{
hasChecked = true;

auto* env = getEnv();

LocalRef<jobject> wifiManager (env->CallObjectMethod (getAppContext().get(),
AndroidContext.getSystemService,
javaString ("wifi").get()));

if (wifiManager != nullptr)
{
multicastLock = LocalRef<jobject> (env->CallObjectMethod (wifiManager.get(),
AndroidWifiManager.createMulticastLock,
javaString ("JUCE_MulticastLock").get()));
}
}
if (wifiManager == nullptr)
return GlobalRef{};

return GlobalRef (LocalRef<jobject> (env->CallObjectMethod (wifiManager.get(),
AndroidWifiManager.createMulticastLock,
javaString ("JUCE_MulticastLock").get())));
}();

return multicastLock;
return multicastLock.get();
}

JUCE_API void JUCE_CALLTYPE acquireMulticastLock();
Expand All @@ -244,7 +239,7 @@ JUCE_API void JUCE_CALLTYPE acquireMulticastLock()
auto multicastLock = getMulticastLock();

if (multicastLock != nullptr)
getEnv()->CallVoidMethod (multicastLock.get(), AndroidMulticastLock.acquire);
getEnv()->CallVoidMethod (multicastLock, AndroidMulticastLock.acquire);
}

JUCE_API void JUCE_CALLTYPE releaseMulticastLock();
Expand All @@ -253,7 +248,7 @@ JUCE_API void JUCE_CALLTYPE releaseMulticastLock()
auto multicastLock = getMulticastLock();

if (multicastLock != nullptr)
getEnv()->CallVoidMethod (multicastLock.get(), AndroidMulticastLock.release);
getEnv()->CallVoidMethod (multicastLock, AndroidMulticastLock.release);
}

//==============================================================================
Expand Down

0 comments on commit 6219eb9

Please sign in to comment.