Make resourcecollector initialization explicit

instead automatic initialization, the resourcecollector is pulled up as
backend service.
This commit is contained in:
Christian Thaeter 2010-02-05 09:20:52 +01:00
parent d350a250fa
commit 33a0591689
4 changed files with 18 additions and 8 deletions

View file

@ -29,6 +29,7 @@
#include "backend/filedescriptorregistry.h"
#include "backend/mmapcache.h"
#include "backend/threadpool.h"
#include "backend/resourcecollector.h"
#include <unistd.h>
#include <sys/resource.h>
@ -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);
}

View file

@ -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));

View file

@ -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);

View file

@ -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);