From b776ce568fefb3f47db12e08999ec2ffdb9a46cf Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Mon, 19 Mar 2018 00:44:26 +0100 Subject: [PATCH] DI: fix inspiring Segfault a bloody closure that bangs itself away.... --- research/try.cpp | 27 +++++++++------------------ wiki/thinkPad.ichthyo.mm | 4 +++- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/research/try.cpp b/research/try.cpp index 0eddcf8da..405991129 100644 --- a/research/try.cpp +++ b/research/try.cpp @@ -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::instance = stashInstance; } - static void - disableFactory() - { - ClassLock guard; - Depend::factory = Depend::disabledFactory; - } - static void activateServiceAccess (SRV& newInstance) { @@ -255,7 +246,6 @@ class DependInject static InstanceHolder 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; diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index bdef674c0..abe4bb9db 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -26878,7 +26878,9 @@ - + + +