Skip to content

Commit 715a2f5

Browse files
committed
Solve bugs in destruction of node loader, some leaks are still present. Add debug info for functions, classes and objects in order to detect leaks.
1 parent 0b3aeda commit 715a2f5

File tree

31 files changed

+134
-33
lines changed

31 files changed

+134
-33
lines changed

source/loader/include/loader/loader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ LOADER_API value loader_metadata(void);
9393

9494
LOADER_API int loader_clear(void *handle);
9595

96-
LOADER_API void loader_unload_children(loader_impl impl);
96+
LOADER_API void loader_unload_children(loader_impl impl, int destroy_objects);
9797

9898
LOADER_API int loader_unload(void);
9999

source/loader/source/loader.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -760,7 +760,7 @@ int loader_clear(void *handle)
760760
return loader_impl_clear(handle);
761761
}
762762

763-
void loader_unload_children(loader_impl impl)
763+
void loader_unload_children(loader_impl impl, int destroy_objects)
764764
{
765765
loader l = loader_singleton();
766766
uint64_t current = thread_id_get_current();
@@ -806,7 +806,7 @@ void loader_unload_children(loader_impl impl)
806806
vector_destroy(stack);
807807

808808
/* Clear all objects and types related to the loader once all childs have been destroyed */
809-
if (impl != NULL)
809+
if (impl != NULL && destroy_objects == 0)
810810
{
811811
loader_impl_destroy_objects(impl);
812812
}
@@ -833,7 +833,7 @@ int loader_unload()
833833
/* TODO: How to deal with this? */
834834
}
835835

836-
loader_unload_children(NULL);
836+
loader_unload_children(NULL, 1);
837837

838838
/* The proxy is the first loader, it must be destroyed at the end */
839839
if (l->proxy != NULL)

source/loaders/c_loader/source/c_loader_impl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ int c_loader_impl_destroy(loader_impl impl)
289289
if (c_impl != NULL)
290290
{
291291
/* Destroy children loaders */
292-
loader_unload_children(impl);
292+
loader_unload_children(impl, 0);
293293

294294
delete c_impl;
295295

source/loaders/cob_loader/source/cob_loader_impl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ int cob_loader_impl_destroy(loader_impl impl)
263263
(void)impl;
264264

265265
// Destroy children loaders
266-
loader_unload_children(impl);
266+
loader_unload_children(impl, 0);
267267

268268
return cobtidy();
269269
}

source/loaders/cr_loader/crystal/cr_loader_impl.cr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ fun cr_loader_impl_destroy(impl : Void*) : LibC::Int
7878
ptr = LibMetaCall.loader_impl_get(impl)
7979

8080
# Destroy children loaded by this loader
81-
LibMetaCall.loader_unload_children()
81+
LibMetaCall.loader_unload_children(impl, 0)
8282

8383
cr_impl = Box(CrystalLoaderImpl).unbox(ptr)
8484

source/loaders/cr_loader/crystal/metacall.cr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ lib LibMetaCall
2121
# Loader
2222
fun loader_impl_get(impl : Void*) : Void*
2323
fun loader_initialization_register(impl : Void*) : Void
24-
fun loader_unload_children() : Void
24+
fun loader_unload_children(impl : Void*, destroy_children : int) : Void
2525

2626
# Log
2727
# TODO: log_write is a macro that must be reimplemented properly (log_write_impl, log_write_impl_va)

source/loaders/cs_loader/source/cs_loader_impl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ int cs_loader_impl_destroy(loader_impl impl)
396396
netcore_handle nhandle = (netcore_handle)loader_impl_get(impl);
397397

398398
/* Destroy children loaders */
399-
loader_unload_children(impl);
399+
loader_unload_children(impl, 0);
400400

401401
simple_netcore_destroy(nhandle);
402402

source/loaders/dart_loader/source/dart_loader_impl.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ int dart_loader_impl_destroy(loader_impl impl)
571571
if (dart_impl != nullptr)
572572
{
573573
/* Destroy children loaders */
574-
loader_unload_children(impl);
574+
loader_unload_children(impl, 0);
575575

576576
delete dart_impl;
577577

source/loaders/file_loader/source/file_loader_impl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ int file_loader_impl_destroy(loader_impl impl)
493493
if (file_impl != NULL)
494494
{
495495
/* Destroy children loaders */
496-
loader_unload_children(impl);
496+
loader_unload_children(impl, 0);
497497

498498
if (file_impl->execution_paths != NULL)
499499
{

source/loaders/java_loader/source/java_loader_impl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2023,7 +2023,7 @@ int java_loader_impl_destroy(loader_impl impl)
20232023
}
20242024

20252025
/* Destroy children loaders */
2026-
loader_unload_children(impl);
2026+
loader_unload_children(impl, 0);
20272027

20282028
java_impl->jvm->DestroyJavaVM();
20292029

0 commit comments

Comments
 (0)