Skip to content

Commit 319d555

Browse files
committed
🐛 fix memory leaks from uv_handles
1 parent 98487e8 commit 319d555

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "evmc",
3-
"version": "1.0.4",
3+
"version": "1.0.5",
44
"description": "Ethereum EVMC bindings for node.js",
55
"main": "dist/evmc.js",
66
"types": "dist/evmc.d.ts",

src/evmc.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <stdio.h>
44

55
#include <node_api.h>
6+
67
#include <uv.h>
78

89
#include "evmc/evmc.h"
@@ -196,6 +197,7 @@ enum evmc_storage_status set_storage(struct evmc_js_context* context,
196197
assert(status == napi_ok);
197198

198199
uv_sem_wait(&callinfo.sem);
200+
uv_sem_destroy(&callinfo.sem);
199201

200202
status = napi_release_threadsafe_function(context->set_storage_fn, napi_tsfn_release);
201203
assert(status == napi_ok);
@@ -285,6 +287,7 @@ void get_storage_js(napi_env env, napi_value js_callback, struct evmc_js_context
285287
assert(status == napi_ok);
286288

287289
uv_sem_wait(&callinfo.sem);
290+
uv_sem_destroy(&callinfo.sem);
288291

289292
status = napi_release_threadsafe_function(context->get_storage_fn, napi_tsfn_release);
290293
assert(status == napi_ok);
@@ -373,6 +376,7 @@ bool account_exists(struct evmc_js_context* context,
373376
assert(status == napi_ok);
374377

375378
uv_sem_wait(&callinfo.sem);
379+
uv_sem_destroy(&callinfo.sem);
376380

377381
status = napi_release_threadsafe_function(context->account_exists_fn, napi_tsfn_release);
378382
assert(status == napi_ok);
@@ -459,6 +463,7 @@ evmc_bytes32 get_balance(struct evmc_js_context* context,
459463
assert(status == napi_ok);
460464

461465
uv_sem_wait(&callinfo.sem);
466+
uv_sem_destroy(&callinfo.sem);
462467

463468
status = napi_release_threadsafe_function(context->get_balance_fn, napi_tsfn_release);
464469
assert(status == napi_ok);
@@ -550,6 +555,7 @@ size_t get_code_size(struct evmc_js_context* context,
550555
assert(status == napi_ok);
551556

552557
uv_sem_wait(&callinfo.sem);
558+
uv_sem_destroy(&callinfo.sem);
553559

554560
status = napi_release_threadsafe_function(context->get_code_size_fn, napi_tsfn_release);
555561
assert(status == napi_ok);
@@ -637,6 +643,7 @@ evmc_bytes32 get_code_hash(struct evmc_js_context* context,
637643
assert(status == napi_ok);
638644

639645
uv_sem_wait(&callinfo.sem);
646+
uv_sem_destroy(&callinfo.sem);
640647

641648
status = napi_release_threadsafe_function(context->get_code_hash_fn, napi_tsfn_release);
642649
assert(status == napi_ok);
@@ -753,6 +760,7 @@ size_t copy_code(struct evmc_js_context* context,
753760
assert(status == napi_ok);
754761

755762
uv_sem_wait(&callinfo.sem);
763+
uv_sem_destroy(&callinfo.sem);
756764

757765
status = napi_release_threadsafe_function(context->copy_code_fn, napi_tsfn_release);
758766
assert(status == napi_ok);
@@ -836,7 +844,7 @@ void selfdestruct(struct evmc_js_context* context,
836844
assert(status == napi_ok);
837845

838846
uv_sem_wait(&callinfo.sem);
839-
847+
uv_sem_destroy(&callinfo.sem);
840848

841849
status = napi_release_threadsafe_function(context->selfdestruct_fn, napi_tsfn_release);
842850
assert(status == napi_ok);
@@ -1049,7 +1057,8 @@ struct evmc_result call(struct evmc_js_context* context,
10491057
assert(status == napi_ok);
10501058

10511059
uv_sem_wait(&callinfo.sem);
1052-
1060+
uv_sem_destroy(&callinfo.sem);
1061+
10531062
status = napi_release_threadsafe_function(context->call_fn, napi_tsfn_release);
10541063
assert(status == napi_ok);
10551064

@@ -1208,7 +1217,7 @@ struct evmc_tx_context get_tx_context(struct evmc_js_context* context) {
12081217
assert(status == napi_ok);
12091218

12101219
uv_sem_wait(&callinfo.sem);
1211-
1220+
uv_sem_destroy(&callinfo.sem);
12121221

12131222
status = napi_release_threadsafe_function(context->get_tx_context_fn, napi_tsfn_release);
12141223
assert(status == napi_ok);
@@ -1295,7 +1304,7 @@ evmc_bytes32 get_block_hash(struct evmc_js_context* context, uint64_t number) {
12951304
assert(status == napi_ok);
12961305

12971306
uv_sem_wait(&callinfo.sem);
1298-
1307+
uv_sem_destroy(&callinfo.sem);
12991308

13001309
status = napi_release_threadsafe_function(context->get_block_hash_fn, napi_tsfn_release);
13011310
assert(status == napi_ok);
@@ -1406,7 +1415,8 @@ void emit_log(struct evmc_js_context* context,
14061415
assert(status == napi_ok);
14071416

14081417
uv_sem_wait(&callinfo.sem);
1409-
1418+
uv_sem_destroy(&callinfo.sem);
1419+
14101420
status = napi_release_threadsafe_function(context->emit_log_fn, napi_tsfn_release);
14111421
assert(status == napi_ok);
14121422
}
@@ -1606,6 +1616,8 @@ void completer_js(napi_env env, napi_value js_callback, void* context, struct js
16061616

16071617
status = napi_resolve_deferred(env, data->deferred, out);
16081618
assert(status == napi_ok);
1619+
1620+
free(data);
16091621
}
16101622

16111623
void execute_done(uv_work_t* work, int status) {

0 commit comments

Comments
 (0)