Check callback status in thread
This commit is contained in:
parent
dfe24ed9d7
commit
5f161e73c7
@ -71,16 +71,23 @@ fn run_in_thread(callback: JsFunction) -> Result<()> {
|
||||
callback.create_threadsafe_function(UNBOUNDED_QUEUE, |ctx| Ok(vec![ctx.value]))?;
|
||||
|
||||
let handle = std::thread::spawn(move || {
|
||||
let mut map = THREAD_TRANSACTIONS
|
||||
.lock()
|
||||
.map_err(|_| napi::Error::from_reason("THREAD_TRANSACTIONS Mutex poisoned"))?;
|
||||
let result = gbt::gbt(&mut map).ok_or_else(|| napi::Error::from_reason("gbt failed"))?;
|
||||
let result = {
|
||||
let mut map = THREAD_TRANSACTIONS
|
||||
.lock()
|
||||
.map_err(|_| napi::Error::from_reason("THREAD_TRANSACTIONS Mutex poisoned"))?;
|
||||
gbt::gbt(&mut map).ok_or_else(|| napi::Error::from_reason("gbt failed"))?
|
||||
};
|
||||
|
||||
// Note: A call mode of Blocking does not mean it will block, but rather it tells
|
||||
// the N-API what to do in the event of a full queue.
|
||||
// The queue will never be full, so Blocking is fine.
|
||||
thread_safe_callback.call(result, ThreadsafeFunctionCallMode::Blocking);
|
||||
Ok(())
|
||||
match thread_safe_callback.call(result, ThreadsafeFunctionCallMode::Blocking) {
|
||||
Status::Ok => Ok(()),
|
||||
error => Err(napi::Error::from_reason(format!(
|
||||
"Callback failure: {}",
|
||||
error
|
||||
))),
|
||||
}
|
||||
});
|
||||
|
||||
handle
|
||||
|
Loading…
x
Reference in New Issue
Block a user