<div dir="ltr"><div>The createRtcContext function is like this:</div><div><div style="background-color:rgb(30,31,34);color:rgb(188,190,196)"><pre style="font-family:"JetBrains Mono",monospace;font-size:9.8pt"><span style="color:rgb(207,142,109)">void </span><span style="color:rgb(86,168,245)">createRtcContext</span>(<span style="color:rgb(207,142,109)">const char</span>* localId, <span style="color:rgb(207,142,109)">int </span>logLevel, <span style="color:rgb(181,182,227)">IceConfig</span>* iceConfig, <span style="color:rgb(181,182,227)">DataChannelConfig</span>* dataChannelConfig) {<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"1" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> <span style="color:rgb(207,142,109)">int </span>expected = <span style="color:rgb(42,172,184)">0</span>;<br> <span style="color:rgb(207,142,109)">bool </span>success = state.compare_exchange_strong(expected, <span style="color:rgb(42,172,184)">1</span>);<br> <span style="color:rgb(207,142,109)">if </span>(!success) <span style="color:rgb(207,142,109)">return</span>;<br> <span style="color:rgb(207,142,109)">if </span>(localId == <span style="color:rgb(207,142,109)">nullptr</span>) <span style="color:rgb(207,142,109)">return</span>;<br> <span style="color:rgb(207,142,109)">if </span>(iceConfig == <span style="color:rgb(207,142,109)">nullptr</span>) <span style="color:rgb(207,142,109)">return</span>;<br> <span style="color:rgb(207,142,109)">if </span>(dataChannelConfig == <span style="color:rgb(207,142,109)">nullptr</span>) <span style="color:rgb(207,142,109)">return</span>;<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> <span style="color:rgb(181,182,227)">std</span>::<span style="color:rgb(185,188,209)">string </span>id = <span style="color:rgb(181,182,227)">std</span>::string(localId);<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2 1" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">" " </span><span style="color:rgb(95,140,138)"><< </span>id <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> <span style="color:rgb(181,182,227)">std</span>::make_unique<<span style="color:rgb(207,142,109)">int</span>>(<span style="color:rgb(42,172,184)">3</span>);<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2 1 1" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> rtcManager <span style="color:rgb(95,140,138)">= </span><span style="color:rgb(181,182,227)">std</span>::make_unique<<span style="color:rgb(181,182,227)">RtcManager</span>>(); <span style="color:rgb(122,126,133)">// Crash here!<br></span><span style="color:rgb(122,126,133)"> </span><span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2 1 2" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> rtcManager<span style="color:rgb(95,140,138)">-></span>setLocalId(id);<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2 2" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> rtcManager<span style="color:rgb(95,140,138)">-></span>initLogger(logLevel);<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2 3" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> <span style="color:rgb(181,182,227)">IceModel </span>iceModel;<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2 4" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> iceModel.setNoStun(iceConfig-><span style="color:rgb(147,115,165)">noStun</span>);<br> iceModel.setStunServer(<span style="color:rgb(181,182,227)">std</span>::string(iceConfig-><span style="color:rgb(147,115,165)">stunServer</span>));<br> iceModel.setStunPort(iceConfig-><span style="color:rgb(147,115,165)">stunPort</span>);<br> iceModel.setUdpMux(iceConfig-><span style="color:rgb(147,115,165)">udpMux</span>);<br> iceModel.setWebSocketServer(<span style="color:rgb(181,182,227)">std</span>::string(iceConfig-><span style="color:rgb(147,115,165)">webSocketServer</span>));<br> iceModel.setWebSocketPort(iceConfig-><span style="color:rgb(147,115,165)">webSocketPort</span>);<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2 5" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> <span style="color:rgb(207,142,109)">auto </span>dataChannelListener = <span style="color:rgb(181,182,227)">DataChannelListener</span>::Builder()<br> .withOnOpen(dataChannelConfig-><span style="color:rgb(147,115,165)">onOpen</span>)<br> .withOnClosed(dataChannelConfig-><span style="color:rgb(147,115,165)">onClosed</span>)<br> .withOnTextMessage(dataChannelConfig-><span style="color:rgb(147,115,165)">onTextMessage</span>)<br> .withOnBinaryMessage(dataChannelConfig-><span style="color:rgb(147,115,165)">onBinaryMessage</span>)<br> .build();<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"2 6" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> <span style="color:rgb(181,182,227)">std</span>::<span style="color:rgb(181,182,227)">shared_ptr</span><<span style="color:rgb(181,182,227)">DataChannelListener</span>> dcListener = <span style="color:rgb(181,182,227)">std</span>::move(dataChannelListener);<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"3" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> rtcManager<span style="color:rgb(95,140,138)">-></span>initDataChannelListener(dcListener);<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"4" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> <span style="color:rgb(181,182,227)">std</span>::<span style="color:rgb(181,182,227)">unique_ptr</span><<span style="color:rgb(181,182,227)">WebSocketHelper</span>> webSocketHelper = rtcManager<span style="color:rgb(95,140,138)">-></span>connectToSignalingServer(iceModel);<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"5" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br> <span style="color:rgb(207,142,109)">while </span>(state.load() == <span style="color:rgb(42,172,184)">1</span>) {<br> <span style="color:rgb(181,182,227)">std</span>::<span style="color:rgb(181,182,227)">this_thread</span>::yield();<br> }<br> <span style="color:rgb(181,182,227)">std</span>::cout <span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(106,171,115)">"6" </span><span style="color:rgb(95,140,138)"><< </span><span style="color:rgb(181,182,227)">std</span>::endl;<br>}</pre></div></div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Mon, Mar 31, 2025 at 5:26 PM bai li <<a href="mailto:k3315368931@gmail.com">k3315368931@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Panama team,<br><br>I’m using the Java FFM API in JDK 21 to call a C++ dynamic library function, `void createRtcContext(const char* localId, int logLevel, IceConfig* iceConfig, DataChannelConfig* dataChannelConfig)`. The function can be invoked, but it crashes when executing `std::make_unique<RtcManager>()` inside the function. The same C++ code runs without any issues when executed independently. The `RtcManager` class is roughly defined as follows:<br><br>```cpp<br>class RtcManager {<br>private:<br> std::string localId;<br> rtc::Configuration config;<br> std::unordered_map<std::string, std::shared_ptr<rtc::PeerConnection>> peerConnectionMap;<br> std::unordered_map<std::string, std::shared_ptr<rtc::DataChannel>> dataChannelMap;<br> std::shared_ptr<rtc::WebSocket> ws = std::make_shared<rtc::WebSocket>();<br> std::shared_ptr<DataChannelListener> dataChannelListener = nullptr;<br>public:<br> explicit RtcManager(const std::string& id) : localId(id) {}<br>};<div><div>The C++ code is compiled with MSVC 2022. Here’s the crash log from the console:</div></div><div># A fatal error has been detected by the Java Runtime Environment:<br>#<br># EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffb0ca62f58, pid=22096, tid=26348<br>#<br># JRE version: Java(TM) SE Runtime Environment (21.0.6+8) (build 21.0.6+8-LTS-188)<br># Java VM: Java HotSpot(TM) 64-Bit Server VM (21.0.6+8-LTS-188, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)<br># Problematic frame:<br># C [msvcp140.dll+0x12f58]<br>#<br># No core dump will be written. Minidumps are not enabled by default on client versions of Windows<br>#<br># An error report file with more information is saved as:<br># E:\projects\backend-projects\test\hs_err_pid22096.log<br>[0.236s][warning][os] Loading hsdis library failed<br>#<br># If you would like to submit a bug report, please visit:<br># <a href="https://bugreport.java.com/bugreport/crash.jsp" target="_blank">https://bugreport.java.com/bugreport/crash.jsp</a><br># The crash happened outside the Java Virtual Machine in native code.<br># See problematic frame for where to report the bug.<br>#<br></div><div><div>Thanks</div></div></div>
</blockquote></div>