DI: fix inspiring Segfault

a bloody closure that bangs itself away....
This commit is contained in:
Fischlurch 2018-03-19 00:44:26 +01:00
parent f0c8928301
commit b776ce568f
2 changed files with 12 additions and 19 deletions

View file

@ -144,12 +144,10 @@ class Depend
if (!instance)
{
if (!factory)
{
instance = singleton.buildInstance();
factory = disabledFactory;
}
instance = singleton.buildInstance();
else
instance = factory();
factory = disabledFactory;
}
}
@ -219,13 +217,6 @@ class DependInject
Depend<SRV>::instance = stashInstance;
}
static void
disableFactory()
{
ClassLock<SRV> guard;
Depend<SRV>::factory = Depend<SRV>::disabledFactory;
}
static void
activateServiceAccess (SRV& newInstance)
{
@ -255,7 +246,6 @@ class DependInject
static InstanceHolder<SUB> singleton;
installFactory ([&]()
{
disableFactory();
return singleton.buildInstance();
});
}
@ -320,7 +310,6 @@ class DependInject
temporarilyInstallAlternateFactory (origInstance_, origFactory_
,[this]()
{
disableFactory();
mock_.reset(new MOC{});
return mock_.get();
});
@ -451,19 +440,19 @@ main (int, char**)
SHOW_EXPR( checksum );
SHOW_EXPR( mockDum->probe() );
SHOW_EXPR( checksum );
mockDum->offset = 20;
mockDum->offset = -4;
SHOW_EXPR( dumm().probe() );
VERIFY_ERROR (LIFECYCLE, mockDummy3->probe() );
CHECK (!mockDummy3);
SHOW_EXPR( checksum );
SHOW_EXPR( dep3().probe() );
SHOW_EXPR( checksum );
CHECK ( mockDummy3);
SHOW_EXPR( mockDummy3->probe() );
SHOW_EXPR( checksum );
mockDummy3->offset = 10;
mockDummy3->offset = 19;
SHOW_EXPR( dep3().probe() );
mockDum->offset = 50;
mockDum->offset = -6;
SHOW_EXPR( dep3().probe() );
SHOW_EXPR( dumm().probe() );
SHOW_EXPR( checksum );
@ -490,7 +479,7 @@ main (int, char**)
SHOW_EXPR( mockDummy31->probe() );
SHOW_EXPR( service->probe() );
CHECK (mockDummy31->offset != service->offset);
service->offset = 35;
service->offset = 20;
SHOW_EXPR( dep3().probe() );
SHOW_EXPR( mockDummy31->probe() );
SHOW_EXPR( service->probe() );
@ -502,8 +491,10 @@ main (int, char**)
}
SHOW_EXPR( checksum );
VERIFY_ERROR (LIFECYCLE, dep3().probe() );
SHOW_EXPR( dumm().probe() );
SHOW_EXPR( checksum );
cout << "\n.gulp.\n";
return 0;

View file

@ -26878,7 +26878,9 @@
</node>
<node CREATED="1521213011289" ID="ID_1360216253" MODIFIED="1521213015444" TEXT="Vereinheitlichung">
<node CREATED="1521213017168" ID="ID_1734833663" MODIFIED="1521213021084" TEXT="alle Varianten">
<node CREATED="1521213036670" ID="ID_1288760048" MODIFIED="1521213042401" TEXT="sind move-only"/>
<node CREATED="1521213036670" ID="ID_1288760048" MODIFIED="1521416387077" TEXT="sind move-only">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1521213116611" ID="ID_1639434185" MODIFIED="1521213127773" TEXT="enthalten eine Closure &#xfc;ber einen konkreten Ctor"/>
<node CREATED="1521213855997" ID="ID_1959805856" MODIFIED="1521213868751" TEXT="installieren eine mit dieser parametrisierte Factory"/>
<node CREATED="1521236923444" ID="ID_909632246" MODIFIED="1521236929411" TEXT="irgendwie...">