fix: single thread for entire signal lifecycle — runtime never dropped (libcrypto TLS fix)
This commit is contained in:
@@ -413,24 +413,12 @@ pub unsafe extern "system" fn Java_com_wzp_engine_SignalManager_nativeSignalConn
|
||||
let relay: String = env.get_string(&relay_j).map(|s| s.into()).unwrap_or_default();
|
||||
let seed: String = env.get_string(&seed_j).map(|s| s.into()).unwrap_or_default();
|
||||
|
||||
// start() connects + registers synchronously (blocks briefly).
|
||||
// Then we spawn run() on a thread for the recv loop.
|
||||
// start() spawns an internal thread (connect+register+recv, ONE runtime, never dropped).
|
||||
// Blocks up to 10s waiting for the connect+register to complete.
|
||||
match crate::signal_mgr::SignalManager::start(&relay, &seed) {
|
||||
Ok(mgr) => {
|
||||
let handle = Box::new(SignalHandle { mgr });
|
||||
let raw = Box::into_raw(handle);
|
||||
|
||||
// Spawn recv loop on a small thread (no crypto init, just recv)
|
||||
let recv_ref: &'static SignalHandle = unsafe { &*raw };
|
||||
std::thread::Builder::new()
|
||||
.name("wzp-signal-recv".into())
|
||||
.stack_size(2 * 1024 * 1024) // 2MB is enough for recv-only
|
||||
.spawn(move || {
|
||||
recv_ref.mgr.run();
|
||||
})
|
||||
.ok();
|
||||
|
||||
raw as jlong
|
||||
Box::into_raw(handle) as jlong
|
||||
}
|
||||
Err(e) => {
|
||||
error!("signal connect failed: {e}");
|
||||
|
||||
Reference in New Issue
Block a user