From 4836915768909f744833995184dea66eaba59d96 Mon Sep 17 00:00:00 2001 From: michal Date: Fri, 16 Jan 2026 16:10:13 +0100 Subject: [PATCH] fix: added key function --- .../common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp | 6 ++++++ .../common/cpp/audioapi/HostObjects/AudioNodeHostObject.h | 1 + .../cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp | 6 ++++++ .../cpp/audioapi/HostObjects/BaseAudioContextHostObject.h | 2 ++ 4 files changed, 15 insertions(+) diff --git a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp index d403a5501..08a3babda 100644 --- a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +++ b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp @@ -19,6 +19,12 @@ AudioNodeHostObject::AudioNodeHostObject(const std::shared_ptr &node) JSI_EXPORT_FUNCTION(AudioNodeHostObject, disconnect)); } +// Explicitly define destructor here, as they to exist in order to act as a +// "key function" for the audio classes - this allow for RTTI to work +// properly across dynamic library boundaries (i.e. dynamic_cast that is used by +// isHostObject method), android specific issue +AudioNodeHostObject::~AudioNodeHostObject() = default; + JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, numberOfInputs) { return {node_->getNumberOfInputs()}; } diff --git a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h index 726551a71..dfea4ab46 100644 --- a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +++ b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h @@ -14,6 +14,7 @@ class AudioNode; class AudioNodeHostObject : public JsiHostObject { public: explicit AudioNodeHostObject(const std::shared_ptr &node); + ~AudioNodeHostObject() override; JSI_PROPERTY_GETTER_DECL(numberOfInputs); JSI_PROPERTY_GETTER_DECL(numberOfOutputs); diff --git a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp index a7ec66a0a..915186c7b 100644 --- a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +++ b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp @@ -62,6 +62,12 @@ BaseAudioContextHostObject::BaseAudioContextHostObject( JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createWaveShaper)); } +// Explicitly define destructors here, as they to exist in order to act as a +// "key function" for the audio classes - this allow for RTTI to work +// properly across dynamic library boundaries (i.e. dynamic_cast that is used by +// isHostObject method), android specific issue +BaseAudioContextHostObject::~BaseAudioContextHostObject() = default; + JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, destination) { auto destination = std::make_shared(context_->getDestination()); return jsi::Object::createFromHostObject(runtime, destination); diff --git a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h index 63b9cb152..20d21827f 100644 --- a/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +++ b/packages/react-native-audio-api/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h @@ -21,6 +21,8 @@ class BaseAudioContextHostObject : public JsiHostObject { jsi::Runtime *runtime, const std::shared_ptr &callInvoker); + ~BaseAudioContextHostObject() override; + JSI_PROPERTY_GETTER_DECL(destination); JSI_PROPERTY_GETTER_DECL(state); JSI_PROPERTY_GETTER_DECL(sampleRate);