From aa7fe2591c673c607156a1218645338b018d9808 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Mon, 26 Jan 2009 01:09:49 +0100 Subject: [PATCH] use a dedicated header to pull up early NoBug init --- src/lib/Makefile.am | 2 ++ src/lib/nobug-init.cpp | 43 ++++++++++++++++++++++++++++ src/lib/nobug-init.hpp | 53 +++++++++++++++++++++++++++++++++++ src/lib/singletonfactory.hpp | 5 +--- src/lib/singletonpolicies.hpp | 1 + src/lib/sync-classlock.hpp | 1 + 6 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 src/lib/nobug-init.cpp create mode 100644 src/lib/nobug-init.hpp diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index ede6de1cf..cb1451c4f 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -37,6 +37,7 @@ liblumiera_la_SOURCES = \ $(liblumiera_la_srcdir)/allocationcluster.cpp \ $(liblumiera_la_srcdir)/lumitime.cpp \ $(liblumiera_la_srcdir)/lifecycle.cpp \ + $(liblumiera_la_srcdir)/nobug-init.cpp \ $(liblumiera_la_srcdir)/util.cpp \ $(liblumiera_la_srcdir)/visitor.cpp \ $(liblumiera_la_srcdir)/query.cpp \ @@ -64,6 +65,7 @@ noinst_HEADERS += \ $(liblumiera_la_srcdir)/scopedholdertransfer.hpp \ $(liblumiera_la_srcdir)/scopedholder.hpp \ $(liblumiera_la_srcdir)/lifecycleregistry.hpp \ + $(liblumiera_la_srcdir)/nobug-init.hpp \ $(liblumiera_la_srcdir)/factory.hpp \ $(liblumiera_la_srcdir)/frameid.hpp \ $(liblumiera_la_srcdir)/singleton.hpp \ diff --git a/src/lib/nobug-init.cpp b/src/lib/nobug-init.cpp new file mode 100644 index 000000000..69b75b98e --- /dev/null +++ b/src/lib/nobug-init.cpp @@ -0,0 +1,43 @@ +/* + NoBugInit - pull up NoBug automagically in static initialisation + + Copyright (C) Lumiera.org + 2009, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +* *****************************************************/ + + +#include "lib/nobug-init.hpp" + + + +namespace lumiera { + + void + initialise_NoBug () + { + NOBUG_INIT; + +////////////////////////////////////////////////////////////////////////TODO: a better way to detect Alpha/beta builds +#ifdef DEBUG + static uint callCount = 0; + ASSERT ( 0 == callCount++ ); +#endif + } + +} + diff --git a/src/lib/nobug-init.hpp b/src/lib/nobug-init.hpp new file mode 100644 index 000000000..a34fa8577 --- /dev/null +++ b/src/lib/nobug-init.hpp @@ -0,0 +1,53 @@ +/* + NOBUG-INIT.hpp - pull up NoBug automagically in static initialisation + + + Copyright (C) Lumiera.org + 2009, Hermann Vosseler + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file nobug-init.hpp + ** Trigger the basic NoBug initialisation by placing a static variable. + ** Any facility which uses NoBug (especially logging) already within the + ** static initialisation phase of the application, should do the include + ** via this header, which additionally installs a Lifecycle callback to + ** be run as early as possible. + ** + ** @see logging.h + ** + */ + + +#ifndef NOBUG_INIT_H +#define NOBUG_INIT_H + +#include "include/lifecycle.h" + +#include + + + +namespace lumiera { + void initialise_NoBug (); + + namespace { + LifecycleHook trigger_init_ (ON_BASIC_INIT, &initialise_NoBug); +} } + + +#endif /* NOBUG_INIT_H */ diff --git a/src/lib/singletonfactory.hpp b/src/lib/singletonfactory.hpp index 0f2f4b225..13751c956 100644 --- a/src/lib/singletonfactory.hpp +++ b/src/lib/singletonfactory.hpp @@ -37,6 +37,7 @@ This code is heavily inspired by #include "lib/singletonpolicies.hpp" // several Policies usable together with SingletonFactory +#include "lib/nobug-init.hpp" #include "include/logging.h" #include "lib/util.hpp" #include "lib/sync-classlock.hpp" @@ -82,10 +83,6 @@ namespace lumiera { { if (!pInstance_) { - NOBUG_INIT; - FIXME ("NoBug wasnt even basically initialized here, the old ON_BASIC_INIT did not initialize it in proper order" - " so I explicitly init it here (calling init multiple times does not harm) --cehteh" - " nb maybe as exception we can use an explicit mutex here since pthread mutexes can be statically initialized"); ThreadLock guard SIDEEFFECT; if (!pInstance_) diff --git a/src/lib/singletonpolicies.hpp b/src/lib/singletonpolicies.hpp index cfc21c67a..8a4f3271b 100644 --- a/src/lib/singletonpolicies.hpp +++ b/src/lib/singletonpolicies.hpp @@ -34,6 +34,7 @@ This code is heavily inspired by #ifndef LUMIERA_SINGLETONPOLICIES_H #define LUMIERA_SINGLETONPOLICIES_H +#include "lib/nobug-init.hpp" #include "lib/error.hpp" #include diff --git a/src/lib/sync-classlock.hpp b/src/lib/sync-classlock.hpp index 6a060eb1f..c18593838 100644 --- a/src/lib/sync-classlock.hpp +++ b/src/lib/sync-classlock.hpp @@ -36,6 +36,7 @@ #ifndef LIB_SYNC_CLASSLOCK_H #define LIB_SYNC_CLASSLOCK_H +#include "lib/nobug-init.hpp" #include "lib/sync.hpp"