diff options
Diffstat (limited to 'ext/ffi/callback.rs')
-rw-r--r-- | ext/ffi/callback.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/ext/ffi/callback.rs b/ext/ffi/callback.rs index 78a21ab8f..e9d91855d 100644 --- a/ext/ffi/callback.rs +++ b/ext/ffi/callback.rs @@ -567,7 +567,19 @@ where } let async_work_sender = - state.borrow_mut::<FfiState>().async_work_sender.clone(); + if let Some(ffi_state) = state.try_borrow_mut::<FfiState>() { + ffi_state.async_work_sender.clone() + } else { + let (async_work_sender, async_work_receiver) = + mpsc::unbounded::<PendingFfiAsyncWork>(); + + state.put(FfiState { + async_work_receiver, + async_work_sender: async_work_sender.clone(), + }); + + async_work_sender + }; let callback = v8::Global::new(scope, cb).into_raw(); let current_context = scope.get_current_context(); let context = v8::Global::new(scope, current_context).into_raw(); |