diff --git a/src/backend/backend.c b/src/backend/backend.c index 945024958..e18b2af98 100644 --- a/src/backend/backend.c +++ b/src/backend/backend.c @@ -29,6 +29,7 @@ #include "backend/filedescriptorregistry.h" #include "backend/mmapcache.h" #include "backend/threadpool.h" +#include "backend/resourcecollector.h" #include #include @@ -68,6 +69,8 @@ lumiera_backend_init (void) lumiera_mutex_init (&lumiera_filecreate_mutex, "fileaccess", &NOBUG_FLAG (mutex_dbg), NOBUG_CONTEXT); + lumiera_resourcecollector_init (); + lumiera_threadpool_init (); lumiera_filedescriptorregistry_init (); @@ -116,11 +119,14 @@ void lumiera_backend_destroy (void) { TRACE (backend_dbg); + lumiera_mmapcache_delete (); lumiera_filehandlecache_delete (); lumiera_filedescriptorregistry_destroy (); lumiera_threadpool_destroy (); + lumiera_resourcecollector_destroy (); + lumiera_mutex_destroy (&lumiera_filecreate_mutex, &NOBUG_FLAG (mutex_dbg), NOBUG_CONTEXT); } diff --git a/src/backend/resourcecollector.c b/src/backend/resourcecollector.c index 84af12f86..7ef6a48de 100644 --- a/src/backend/resourcecollector.c +++ b/src/backend/resourcecollector.c @@ -32,7 +32,6 @@ llist lumiera_resourcecollector_registry[LUMIERA_RESOURCE_END]; lumiera_mutex lumiera_resourcecollector_lock; -static pthread_once_t lumiera_resourcecollector_once = PTHREAD_ONCE_INIT; struct lumiera_resourcehandler_struct { @@ -42,8 +41,8 @@ struct lumiera_resourcehandler_struct }; -static void -lumiera_resourcecollector_init_ (void) +void +lumiera_resourcecollector_init (void) { //NOBUG_INIT_FLAG (resourcecollector); TRACE (resourcecollector_dbg); @@ -74,8 +73,6 @@ lumiera_resourcecollector_run (enum lumiera_resource which, enum lumiera_resourc { TRACE (resourcecollector_dbg); - pthread_once (&lumiera_resourcecollector_once, lumiera_resourcecollector_init_); - LUMIERA_MUTEX_SECTION (mutex_sync, &lumiera_resourcecollector_lock) { for (enum lumiera_resource_try progress = LUMIERA_RESOURCE_NONE; progress < *iteration; ++*iteration) @@ -119,8 +116,6 @@ lumiera_resourcecollector_run (enum lumiera_resource which, enum lumiera_resourc LumieraResourcehandler lumiera_resourcecollector_register_handler (enum lumiera_resource resource, lumiera_resource_handler_fn handler, void* data) { - pthread_once (&lumiera_resourcecollector_once, lumiera_resourcecollector_init_); - TRACE (resourcecollector_dbg); LumieraResourcehandler self = lumiera_malloc (sizeof (*self)); diff --git a/src/backend/resourcecollector.h b/src/backend/resourcecollector.h index e7addae49..eae4079ea 100644 --- a/src/backend/resourcecollector.h +++ b/src/backend/resourcecollector.h @@ -98,10 +98,17 @@ typedef struct lumiera_resourcehandler_struct lumiera_resourcehandler; typedef lumiera_resourcehandler* LumieraResourcehandler; +/** + * Initialize the Resourcecollector. + * The resourcecollector is singleton and can be used after initialized once. + */ +void +lumiera_resourcecollector_init (void); + + /** * Destroy the resource collector registry. * Unregisters and deletes all handlers. - * Note that there is no resourcecollector_init() function, initialization is automatic on first use. */ void lumiera_resourcecollector_destroy (void); diff --git a/tests/backend/test-resourcecollector.c b/tests/backend/test-resourcecollector.c index c0e8380a9..166dc1129 100644 --- a/tests/backend/test-resourcecollector.c +++ b/tests/backend/test-resourcecollector.c @@ -50,6 +50,7 @@ TESTS_BEGIN TEST ("basic") { + lumiera_resourcecollector_init (); lumiera_resourcecollector_register_handler (LUMIERA_RESOURCE_MEMORY, test_memory_handler, NULL); lumiera_resourcecollector_destroy (); } @@ -57,6 +58,7 @@ TEST ("basic") TEST ("memory_collection_mockup") { REQUIRE (argv[2]); + lumiera_resourcecollector_init (); lumiera_resourcecollector_register_handler (LUMIERA_RESOURCE_MEMORY, test_memory_handler, NULL);