Skip to content

Commit 9e2a90c

Browse files
committed
fix: revert problematic napi_wrap in registerBlock that breaks exception handling
1 parent 8e23b9d commit 9e2a90c

2 files changed

Lines changed: 15 additions & 13 deletions

File tree

NativeScript/ffi/Block.mm

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,15 @@ id registerBlock(napi_env env, Closure* closure, napi_value callback) {
6060

6161
napi_remove_wrap(env, callback, nullptr);
6262
napi_ref ref = nullptr;
63-
napi_wrap(env, callback, block, block_finalize, nullptr, &ref);
64-
if (ref != nullptr) {
65-
uint32_t refCount;
66-
napi_reference_ref(env, ref, &refCount);
67-
}
63+
// TODO: fix memory management of objc blocks here
64+
// napi_wrap(env, callback, block, block_finalize, nullptr, &ref);
65+
// if (ref == nullptr) {
66+
// Deno doesn't handle napi_wrap properly.
67+
ref = make_ref(env, callback, 1);
68+
// } else {
69+
// uint32_t refCount;
70+
// napi_reference_ref(env, ref, &refCount);
71+
// }
6872
closure->func = ref;
6973

7074
auto bridgeState = ObjCBridgeState::InstanceData(env);

NativeScript/ffi/node_api_util.h

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,14 @@ inline bool napiSupportsThreadsafeFunctions(void* dl) {
6060
return NULL; \
6161
}
6262

63-
#define NAPI_ERROR_INFO \
64-
const napi_extended_error_info* error_info = nullptr; \
63+
#define NAPI_ERROR_INFO \
64+
const napi_extended_error_info* error_info = \
65+
(napi_extended_error_info*)malloc(sizeof(napi_extended_error_info)); \
6566
napi_get_last_error_info(env, &error_info);
6667

67-
#define NAPI_THROW_LAST_ERROR \
68-
{ \
69-
NAPI_ERROR_INFO \
70-
napi_throw_error( \
71-
env, NULL, error_info ? error_info->error_message : "Unknown error"); \
72-
}
68+
#define NAPI_THROW_LAST_ERROR \
69+
NAPI_ERROR_INFO \
70+
napi_throw_error(env, NULL, error_info->error_message);
7371

7472
#ifndef DEBUG
7573

0 commit comments

Comments
 (0)