Identified some problems regarding static destruction

When some dependency or singleton violates Lumiera's policy regarding destructors and shutdown,
we are unable to detect this violation reliably and produce a Fatal Error message.
This is due to lib::Depend's de-initialisating being itself tied to template generated
static variables, which unfortunately have a visibility scope beyond the translation unit
responsible for construction and clean-up.
This commit is contained in:
Fischlurch 2018-03-31 17:27:13 +02:00
parent fc546f71b4
commit f0eeafddaa
3 changed files with 361 additions and 60 deletions

130
src/lib/dependable-base.hpp Normal file
View file

@ -0,0 +1,130 @@
/*
DEPENDABLE-BASE.hpp - fundamental structures with extended lifespan
Copyright (C) Lumiera.org
2018, Hermann Vosseler <Ichthyostega@web.de>
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 dependable-base.hpp
** Static container to hold basic entities needed during static init and shutdown.
** A special implementation of lib::Sync, where the storage of the object monitor
** is associated directly to a type rather then to a single object instance. While
** being problematic in conjunction with static startup/shutdown, doing so is sometimes
** necessary to setup type based dispatcher tables, managing singleton creation etc.
**
** @note simply using the ClassLock may cause a Monitor object (with a mutex) to be
** created at static initialisation and destroyed on application shutdown.
** @see singleton-factory.hpp usage example
*/
#ifndef LIB_DEPENDABLE_BASE_H
#define LIB_DEPENDABLE_BASE_H
#include "lib/nobug-init.hpp"
#include "lib/sync.hpp"
namespace lib {
namespace nifty { // implementation details
template<class X>
struct Holder
{
static uint accessed_;
static char content_[sizeof(X)];
Holder()
{
if (!accessed_)
new(content_) X();
++accessed_;
}
~Holder()
{
--accessed_;
if (0==accessed_)
get().~X();
}
X&
get()
{
X* obj = reinterpret_cast<X*> (&content_);
ASSERT (obj, "Logic of Schwartz counter broken.");
return *obj;
}
};
template<class X>
uint Holder<X>::accessed_;
template<class X>
char Holder<X>::content_[sizeof(X)];
} // (End) nifty implementation details
/**
* A synchronisation protection guard employing a lock scoped
* to the parameter type as a whole, not an individual instance.
* After creating an instance, every other access specifying the same
* type is blocked.
* @note the Lock is recursive, because several instances within the same
* thread may want to acquire it at the same time without deadlock.
* @note there is a design sloppiness, as two instantiations of the
* ClassLock template with differing CONF count as different type.
* Actually using two different configurations within for a single
* class X should be detected and flagged as error, but actually
* just two non-shared lock instances get created silently. Beware!
* @see Sync::Lock the usual simple instance-bound variant
*/
template<class X, class CONF = RecursiveLock_NoWait>
class ClassLock_WIP
: public Sync<CONF>::Lock
{
typedef typename Sync<CONF>::Lock Lock;
typedef typename sync::Monitor<CONF> Monitor;
struct PerClassMonitor : Monitor {};
Monitor&
getPerClassMonitor()
{
static nifty::Holder<PerClassMonitor> __used_here;
if (1 != use_count())
{
ERROR (progress, "AUA %d", use_count());
}
ASSERT (1==use_count(), "static init broken");
return __used_here.get();
}
public:
ClassLock_WIP() : Lock (getPerClassMonitor()) { }
uint use_count() { return nifty::Holder<PerClassMonitor>::accessed_; }
};
} // namespace lib
#endif /*LIB_DEPENDABLE_BASE_H*/

View file

@ -110,6 +110,11 @@ namespace lib {
getPerClassMonitor()
{
static nifty::Holder<PerClassMonitor> __used_here;
if (1 != use_count())
{
///////////////////////////////////////////////////////////////////////////TICKET #1133 investigate Problems with shutdown order
ERROR (progress, "AUA %d", use_count());
}
ASSERT (1==use_count(), "static init broken");
return __used_here.get();
@ -123,4 +128,4 @@ namespace lib {
} // namespace lib
#endif
#endif /*LIB_SYNC_CLASSLOCK_H*/

View file

@ -28060,7 +28060,7 @@
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033106576" ID="ID_278956866" MODIFIED="1522034101344" TEXT="weitere Tests...">
<node COLOR="#338800" CREATED="1522033106576" ID="ID_278956866" MODIFIED="1522451856604" TEXT="weitere Tests...">
<richcontent TYPE="NOTE"><html>
<head>
@ -28071,40 +28071,40 @@
</p>
</body>
</html></richcontent>
<linktarget COLOR="#b8154d" DESTINATION="ID_278956866" ENDARROW="Default" ENDINCLINATION="32;436;" ID="Arrow_ID_1985884795" SOURCE="ID_513111416" STARTARROW="None" STARTINCLINATION="223;-69;"/>
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033940685" ID="ID_447878554" MODIFIED="1522034123685" TEXT="media-access-mock-test.cpp">
<icon BUILTIN="flag-yellow"/>
<linktarget COLOR="#15b89e" DESTINATION="ID_278956866" ENDARROW="Default" ENDINCLINATION="32;436;" ID="Arrow_ID_1985884795" SOURCE="ID_513111416" STARTARROW="None" STARTINCLINATION="223;-69;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1522033940685" ID="ID_447878554" MODIFIED="1522451818368" TEXT="media-access-mock-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033969821" ID="ID_1706164763" MODIFIED="1522034133500" TEXT="create-asset-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033969821" ID="ID_1706164763" MODIFIED="1522451819727" TEXT="create-asset-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033977816" ID="ID_15822506" MODIFIED="1522034139730" TEXT="dependent-assets-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033977816" ID="ID_15822506" MODIFIED="1522451820734" TEXT="dependent-assets-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033997907" ID="ID_458476877" MODIFIED="1522034144346" TEXT="identity-of-assets-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033997907" ID="ID_458476877" MODIFIED="1522451821737" TEXT="identity-of-assets-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034004825" ID="ID_1008413222" MODIFIED="1522034149105" TEXT="make-clip-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522034004825" ID="ID_1008413222" MODIFIED="1522451822955" TEXT="make-clip-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034011921" ID="ID_1809290651" MODIFIED="1522034153425" TEXT="ordering-of-assets-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522034011921" ID="ID_1809290651" MODIFIED="1522451823845" TEXT="ordering-of-assets-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034021470" ID="ID_466658369" MODIFIED="1522034157376" TEXT="builder-tool-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522034021470" ID="ID_466658369" MODIFIED="1522451824965" TEXT="builder-tool-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034029190" ID="ID_1418985959" MODIFIED="1522034158463" TEXT="testclip.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522034029190" ID="ID_1418985959" MODIFIED="1522451825981" TEXT="testclip.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034035772" ID="ID_1574270320" MODIFIED="1522034164514" TEXT="mobject-interface-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522034035772" ID="ID_1574270320" MODIFIED="1522451827133" TEXT="mobject-interface-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034044775" ID="ID_984134175" MODIFIED="1522034168774" TEXT="mobject-ref-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522034044775" ID="ID_984134175" MODIFIED="1522451828205" TEXT="mobject-ref-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034052507" ID="ID_1667049787" MODIFIED="1522034171815" TEXT="placement-hierarchy-test.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522034052507" ID="ID_1667049787" MODIFIED="1522451830519" TEXT="placement-hierarchy-test.cpp">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
@ -28113,8 +28113,8 @@
<node COLOR="#338800" CREATED="1521160755182" ID="ID_678080556" MODIFIED="1522428573233" TEXT="Umbenennen">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521160765588" ID="ID_1857896991" MODIFIED="1521160801792" TEXT="Konfig-Aufrufe anpassen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1521160765588" ID="ID_1857896991" MODIFIED="1522451910586" TEXT="Konfig-Aufrufe anpassen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1522033578207" HGAP="18" ID="ID_252429770" MODIFIED="1522389026807" TEXT="Name f&#xfc;r Freunschaft+" VSHIFT="-20">
<icon BUILTIN="button_ok"/>
<node CREATED="1522033614743" ID="ID_1110690522" MODIFIED="1522033614743" TEXT="friend class lib::InstanceHolder&lt;TargetObj&gt;;">
@ -28168,48 +28168,48 @@
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033193572" ID="ID_508353720" MODIFIED="1522033212243" TEXT="DependencyFactory">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033199726" ID="ID_314595550" MODIFIED="1522033214370" TEXT="engine-config.h">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033193572" ID="ID_508353720" MODIFIED="1522446432407" TEXT="DependencyFactory">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1522033199726" ID="ID_314595550" MODIFIED="1522445880917" TEXT="engine-config.h">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033210086" ID="ID_638295060" MODIFIED="1522033214889" TEXT="demo-gui-roundtrip.cpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033210086" ID="ID_638295060" MODIFIED="1522445879580" TEXT="demo-gui-roundtrip.cpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033231644" ID="ID_1199449420" MODIFIED="1522033861273" TEXT="config-facade.h">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033231644" ID="ID_1199449420" MODIFIED="1522445878005" TEXT="config-facade.h">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033250207" ID="ID_322012422" MODIFIED="1522033862009" TEXT="asset/db.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033250207" ID="ID_322012422" MODIFIED="1522445876212" TEXT="asset/db.hpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033810436" ID="ID_1074903860" MODIFIED="1522033862649" TEXT="assetmanager.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033810436" ID="ID_1074903860" MODIFIED="1522445875127" TEXT="assetmanager.hpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033264576" ID="ID_1266730565" MODIFIED="1522033863264" TEXT="stypemanager.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033264576" ID="ID_1266730565" MODIFIED="1522445874063" TEXT="stypemanager.hpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033697671" ID="ID_522765001" MODIFIED="1522033863808" TEXT="diagnostic-buffer-provider.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033697671" ID="ID_522765001" MODIFIED="1522445872867" TEXT="diagnostic-buffer-provider.hpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033733342" ID="ID_711202966" MODIFIED="1522033864312" TEXT="fake-configrules.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033733342" ID="ID_711202966" MODIFIED="1522445945626" TEXT="fake-configrules.hpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033740662" ID="ID_1194803087" MODIFIED="1522033864856" TEXT="dummy-session-connection.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033740662" ID="ID_1194803087" MODIFIED="1522445974621" TEXT="dummy-session-connection.hpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033747205" ID="ID_1409425930" MODIFIED="1522033865352" TEXT="scope-locator.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033747205" ID="ID_1409425930" MODIFIED="1522446086935" TEXT="scope-locator.hpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033753484" ID="ID_1909328069" MODIFIED="1522033865896" TEXT="sess-manager-impl.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033753484" ID="ID_1909328069" MODIFIED="1522446281045" TEXT="sess-manager-impl.hpp">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033760875" ID="ID_1097826895" MODIFIED="1522033866703" TEXT="output-director.hpp">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522033760875" ID="ID_1097826895" MODIFIED="1522446426755" TEXT="output-director.hpp">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034066988" ID="ID_513111416" MODIFIED="1522034101345" TEXT="alle Mock-Tests">
<arrowlink COLOR="#b8154d" DESTINATION="ID_278956866" ENDARROW="Default" ENDINCLINATION="32;436;" ID="Arrow_ID_1985884795" STARTARROW="None" STARTINCLINATION="223;-69;"/>
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1522034066988" ID="ID_513111416" MODIFIED="1522451868492" TEXT="alle Mock-Tests">
<arrowlink COLOR="#15b89e" DESTINATION="ID_278956866" ENDARROW="Default" ENDINCLINATION="32;436;" ID="Arrow_ID_1985884795" STARTARROW="None" STARTINCLINATION="223;-69;"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521858774321" ID="ID_302686020" MODIFIED="1521858778744" TEXT="aufr&#xe4;umen">
@ -28219,8 +28219,8 @@
<node CREATED="1521928764171" ID="ID_507085354" MODIFIED="1521928798462" TEXT="die alte Testmock-L&#xf6;sung">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521928773218" ID="ID_1837242179" MODIFIED="1521928795280" TEXT="nach Schwenken aller Unit-Tests wegfallend">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1521928773218" ID="ID_1837242179" MODIFIED="1522451811958" TEXT="nach Schwenken aller Unit-Tests wegfallend">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1521858791160" ID="ID_1863623429" MODIFIED="1521929094523" TEXT="brauchen wir DelStash noch?">
@ -28248,13 +28248,92 @@
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033564057" ID="ID_1294295502" MODIFIED="1522033567713" TEXT="Nacharbeiten">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1522454023039" ID="ID_1828121921" MODIFIED="1522454031095" TEXT="Folge-Probleme">
<icon BUILTIN="flag-pink"/>
<node CREATED="1522454040500" ID="ID_1674154774" MODIFIED="1522454043160" TEXT="Architektur">
<node CREATED="1522454061873" ID="ID_1012349550" MODIFIED="1522454068316" TEXT="unklare statische Abh&#xe4;ngigkeiten">
<node CREATED="1522454074760" ID="ID_1884600051" MODIFIED="1522457273211" TEXT="ClassLock">
<linktarget COLOR="#8195ac" DESTINATION="ID_1884600051" ENDARROW="Default" ENDINCLINATION="-604;0;" ID="Arrow_ID_648096672" SOURCE="ID_1287049121" STARTARROW="None" STARTINCLINATION="175;-122;"/>
<node CREATED="1522454289393" ID="ID_860238388" MODIFIED="1522454304036" TEXT="verwendet ein Meyers Singleton"/>
<node CREATED="1522454304576" ID="ID_692796029" MODIFIED="1522454312395" TEXT="und damit statische Init"/>
</node>
<node CREATED="1522454152941" ID="ID_1003385410" MODIFIED="1522454158584" TEXT="lib::Depend">
<node CREATED="1522454265837" ID="ID_405478687" MODIFIED="1522454275983" TEXT="braucht ClassLock bis zum bitteren Ende"/>
<node CREATED="1522454276667" ID="ID_1140029140" MODIFIED="1522454286502" TEXT="selbst wenn es nur darum geht, einen Fehler zu produzieren"/>
</node>
<node CREATED="1522454146645" ID="ID_818640049" MODIFIED="1522457337195" TEXT="Advice-System">
<linktarget COLOR="#7a8fa9" DESTINATION="ID_818640049" ENDARROW="Default" ENDINCLINATION="-384;-20;" ID="Arrow_ID_1167388040" SOURCE="ID_1527905225" STARTARROW="None" STARTINCLINATION="288;-115;"/>
<node CREATED="1522454318558" ID="ID_65008261" MODIFIED="1522454338494" TEXT="braucht sicht selbst beim Runterfahren">
<icon BUILTIN="smiley-oh"/>
</node>
<node CREATED="1522455443139" ID="ID_57531429" MODIFIED="1522455450389" TEXT="Pfad...">
<node CREATED="1522455359030" ID="ID_1748706225" MODIFIED="1522455463636" TEXT="~AdviceSystem"/>
<node CREATED="1522455363486" ID="ID_1789501340" MODIFIED="1522455366137" TEXT="DelStash"/>
<node CREATED="1522455375636" ID="ID_890323979" MODIFIED="1522455397132" TEXT="Provision&lt;X&gt;::releaseAdviceData"/>
<node CREATED="1522455412007" ID="ID_1942444713" MODIFIED="1522455423217" TEXT="AdviceLink::releaseBuffer()"/>
<node CREATED="1522455439131" ID="ID_1655592437" MODIFIED="1522455440982" TEXT="aSys().releaseBuffer(buff, siz)"/>
<node CREATED="1522455488220" ID="ID_817525837" MODIFIED="1522455490927" TEXT="Tadaaaa!"/>
</node>
</node>
</node>
<node CREATED="1522454344402" ID="ID_1823464628" MODIFIED="1522454380561" TEXT="Singletons">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1522454381692" ID="ID_1785213595" MODIFIED="1522454381692" TEXT="wurden bisher praktisch gar nicht runtergefahren"/>
<node CREATED="1522454384941" ID="ID_1849825340" MODIFIED="1522454428893" TEXT="zwar pro-Forma schon">
<icon BUILTIN="idea"/>
<node CREATED="1522454395011" ID="ID_1147769502" MODIFIED="1522454420012" TEXT="aber die Storage blieb stehen"/>
<node CREATED="1522454407666" ID="ID_284304272" MODIFIED="1522454412948" TEXT="und so ist es nie aufgefallen"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522455572377" ID="ID_995968267" MODIFIED="1522455583379" TEXT="Policy ist klar">
<icon BUILTIN="yes"/>
<node CREATED="1522455589150" ID="ID_720232530" MODIFIED="1522455637085" TEXT="Kein Service darf aus dem dtor eine Dependency ziehen!">
<icon BUILTIN="yes"/>
</node>
<node CREATED="1522455619290" ID="ID_1340742552" MODIFIED="1522455634839" TEXT="im Zweifelsfalle ist ON_SHUTDOWN zu verwenden!">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522454132616" ID="ID_1054219137" MODIFIED="1522456961034" TEXT="brauchen wir einen Basis-Layer?">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1522455499003" ID="ID_323278727" MODIFIED="1522455503078" TEXT="vermutlich ja"/>
<node CREATED="1522455507937" ID="ID_1029197196" MODIFIED="1522457177939" TEXT="f&#xfc;r wen?">
<linktarget COLOR="#512c6f" DESTINATION="ID_1029197196" ENDARROW="Default" ENDINCLINATION="-299;0;" ID="Arrow_ID_845867084" SOURCE="ID_22169859" STARTARROW="None" STARTINCLINATION="1419;0;"/>
<node CREATED="1522455514361" ID="ID_1288380071" MODIFIED="1522455518148" TEXT="ClassLock"/>
<node CREATED="1522455519448" ID="ID_77194477" MODIFIED="1522455527347" TEXT="Application-Object?"/>
<node CREATED="1522455527838" ID="ID_483432379" MODIFIED="1522455530186" TEXT="Nobug?"/>
</node>
<node CREATED="1522455653525" ID="ID_1606025045" MODIFIED="1522455655449" TEXT="wie?">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522455656181" ID="ID_1878626771" MODIFIED="1522456949428" TEXT="Schwartz-Counter">
<linktarget COLOR="#b12341" DESTINATION="ID_1878626771" ENDARROW="Default" ENDINCLINATION="128;78;" ID="Arrow_ID_1822166267" SOURCE="ID_695551107" STARTARROW="None" STARTINCLINATION="294;0;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1522455662692" ID="ID_402293175" MODIFIED="1522455685565" TEXT="und zwar richtig implementiert">
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1522455672003" ID="ID_1633730200" MODIFIED="1522455677646" TEXT="mit Atomic"/>
</node>
</node>
</node>
<node CREATED="1522454162939" ID="ID_867445269" MODIFIED="1522454175102" TEXT="Subklassen-Konfig">
<node CREATED="1522454176426" ID="ID_964380935" MODIFIED="1522454188772" TEXT="mu&#xdf; jetzt in den Provider-Scope"/>
<node CREATED="1522454189359" ID="ID_1178508604" MODIFIED="1522454200306" TEXT="dieser ist meist nicht so offensichtlich klar"/>
<node COLOR="#338800" CREATED="1522454200902" ID="ID_1367664577" MODIFIED="1522454250176" TEXT="ConfigRules">
<icon BUILTIN="button_ok"/>
<node CREATED="1522454211157" ID="ID_1826864875" MODIFIED="1522454217672" TEXT="Subclass MockConfigRules"/>
<node CREATED="1522454218267" ID="ID_1085608506" MODIFIED="1522454239117" TEXT="in den Defaults-Manager verelgt"/>
<node CREATED="1522454239657" ID="ID_746728834" MODIFIED="1522454248571" TEXT="passiert nun beim Session-Start"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522018567685" ID="ID_1619059123" MODIFIED="1522018578992" TEXT="Frage: was ist mit AppState?">
<icon BUILTIN="help"/>
<node CREATED="1522018581283" ID="ID_132446315" MODIFIED="1522018592182" TEXT="macht es Sinn, das via Depend zug&#xe4;nglich zu machen?"/>
<node CREATED="1522018593697" ID="ID_1730197219" MODIFIED="1522018623361" TEXT="ist bisher ein Meyer&apos;s Singleton"/>
<node CREATED="1522018623861" ID="ID_1923633930" MODIFIED="1522018631776" TEXT="aber lebt bereits im globalen Speicher"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521433694233" ID="ID_1951071885" MODIFIED="1521433716263" TEXT="Nebenbei: Schwartz-Counter in ClassLock abl&#xf6;sen">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521433694233" ID="ID_1951071885" MODIFIED="1522457204996" TEXT="Nebenbei: Schwartz-Counter in ClassLock abl&#xf6;sen">
<arrowlink COLOR="#735d7e" DESTINATION="ID_715588139" ENDARROW="Default" ENDINCLINATION="1087;0;" ID="Arrow_ID_1384015103" STARTARROW="None" STARTINCLINATION="-84;86;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1521433723421" ID="ID_1813539288" MODIFIED="1521433782583" TEXT="Meyers Singleton ist seit C++11 wasserdicht">
<icon BUILTIN="ksmiletris"/>
@ -28272,10 +28351,62 @@
</html></richcontent>
<icon BUILTIN="smiley-oh"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1522451891933" ID="ID_695551107" MODIFIED="1522456944546" TEXT="...und er ist jetzt sogar kamputt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
genauer:
</p>
<p>
er ist nicht kaputt, sondern hat sehr gut funktioniert und diesen Unfug festgestellt.
</p>
<p>
N&#228;mlich da&#223; unser lib::Depend ein ClassLock braucht, um einen Fehler zu melden.
</p>
<p>
Das ist, f&#252;r sich betrachtet, eigentlich unvermeidlich, aber verlangt dann auch
</p>
<p>
nach einer grundlegenden L&#246;sung. D.h. einem <i>echten</i>&#160;Schwartz-Counter.
</p>
<p>
Nicht einem, der in einem Meyer's Singleton steckt...
</p>
</body>
</html>
</richcontent>
<arrowlink COLOR="#b12341" DESTINATION="ID_1878626771" ENDARROW="Default" ENDINCLINATION="128;78;" ID="Arrow_ID_1822166267" STARTARROW="None" STARTINCLINATION="294;0;"/>
<icon BUILTIN="flag-pink"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521160792856" ID="ID_367925099" MODIFIED="1521160800344" TEXT="System l&#xe4;uft wie zuvor">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457229331" ID="ID_1130290094" MODIFIED="1522457234996" TEXT="Test-Suite">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457238099" ID="ID_1287049121" MODIFIED="1522457273211" TEXT="ClassLock schl&#xe4;gt Alarm">
<arrowlink COLOR="#8195ac" DESTINATION="ID_1884600051" ENDARROW="Default" ENDINCLINATION="-604;0;" ID="Arrow_ID_648096672" STARTARROW="None" STARTINCLINATION="175;-122;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457377743" ID="ID_157728376" MODIFIED="1522457379824" TEXT="DefsManager_test">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457303466" ID="ID_28369083" MODIFIED="1522457309129" TEXT="Advice-System verpfuscht">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1522457315568" ID="ID_1527905225" MODIFIED="1522457337194" TEXT="Policy-Verletzung">
<arrowlink COLOR="#7a8fa9" DESTINATION="ID_818640049" ENDARROW="Default" ENDINCLINATION="-384;-20;" ID="Arrow_ID_1167388040" STARTARROW="None" STARTINCLINATION="288;-115;"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457395749" ID="ID_1439882391" MODIFIED="1522457403684" TEXT="Subclass-Ingleton">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1522457406523" ID="ID_715525481" MODIFIED="1522457411620" TEXT="wer ist schuld?">
<icon BUILTIN="flag-pink"/>
</node>
</node>
</node>
</node>
</node>
@ -28316,6 +28447,41 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457000411" ID="ID_736034555" MODIFIED="1522457004364" TEXT="Basis-System">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457035478" ID="ID_1692167558" MODIFIED="1522457039855" TEXT="#1133 dependable base system">
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1522457044789" ID="ID_22169859" MODIFIED="1522457177939" TEXT="f&#xfc;r einige minimale Einrichtungen">
<arrowlink COLOR="#512c6f" DESTINATION="ID_1029197196" ENDARROW="Default" ENDINCLINATION="-299;0;" ID="Arrow_ID_845867084" STARTARROW="None" STARTINCLINATION="1419;0;"/>
</node>
<node CREATED="1522506451269" ID="ID_55500881" MODIFIED="1522506467912" TEXT="Anforderungen">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522506486504" ID="ID_1878547223" MODIFIED="1522506497312" TEXT="Scope jeweils f&#xfc;r einen Target-Typ">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522506518348" ID="ID_1014457759" MODIFIED="1522506526379" TEXT="gemeinsame statische Storage f&#xfc;r diesen Typ">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457084472" ID="ID_1662610871" MODIFIED="1522457093048" TEXT="Schwartz-Counter implementieren">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457095319" ID="ID_1811034910" MODIFIED="1522457208551" TEXT="generisch">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457099278" ID="ID_293179749" MODIFIED="1522457209831" TEXT="wasserdicht mit Header-L&#xf6;sung">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457113044" ID="ID_1913798256" MODIFIED="1522457130605" TEXT="umzustellen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522457119491" ID="ID_715588139" MODIFIED="1522457204997" TEXT="ClassLock">
<linktarget COLOR="#735d7e" DESTINATION="ID_715588139" ENDARROW="Default" ENDINCLINATION="1087;0;" ID="Arrow_ID_1384015103" SOURCE="ID_1951071885" STARTARROW="None" STARTINCLINATION="-84;86;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1522457132025" ID="ID_828796576" MODIFIED="1522457136460" TEXT="Applikation-Objekt?"/>
</node>
</node>
<node CREATED="1482524535575" ID="ID_387248900" MODIFIED="1518487921096" TEXT="Extension-System"/>
<node CREATED="1482524569705" ID="ID_1815572475" MODIFIED="1518487921096" TEXT="Parametrisierung"/>
</node>