diff --git a/std/concurrency.d b/std/concurrency.d index e60aff1aac8..9d548ad020f 100644 --- a/std/concurrency.d +++ b/std/concurrency.d @@ -75,7 +75,6 @@ private import core.sync.mutex; import core.sync.condition; import std.algorithm; - import std.datetime; import std.exception; import std.range; import std.string; @@ -1373,11 +1372,12 @@ private: override bool wait( Duration period ) nothrow { + import core.time; scope(exit) notified = false; - for( auto limit = Clock.currSystemTick + period; + for( auto limit = TickDuration.currSystemTick + period; !notified && !period.isNegative; - period = limit - Clock.currSystemTick ) + period = limit - TickDuration.currSystemTick ) { yield(); } @@ -2047,7 +2047,8 @@ private static if( timedWait ) { - auto limit = Clock.currSystemTick + period; + import core.time; + auto limit = TickDuration.currSystemTick + period; } while( true ) @@ -2095,7 +2096,7 @@ private { static if( timedWait ) { - period = limit - Clock.currSystemTick; + period = limit - TickDuration.currSystemTick; } continue; } diff --git a/std/datetime.d b/std/datetime.d index 9edac57a63c..8769b2ca0bd 100644 --- a/std/datetime.d +++ b/std/datetime.d @@ -27333,31 +27333,15 @@ private: } - static immutable LocalTime _localTime = new immutable(LocalTime)(); - // Use low-lock singleton pattern with _tzsetWasCalled (see http://dconf.org/talks/simcha.html) - static bool _lowLock; - static shared bool _tzsetWasCalled; - - // This is done so that we can maintain purity in spite of doing an impure // operation the first time that LocalTime() is called. static immutable(LocalTime) singleton() @trusted { - if(!_lowLock) - { - synchronized - { - if(!_tzsetWasCalled) - { - tzset(); - _tzsetWasCalled = true; - } - } - - _lowLock = true; - } - - return _localTime; + import std.concurrency : initOnce; + static instance = new immutable(LocalTime)(); + static shared bool guard; + initOnce!guard({tzset(); return true;}()); + return instance; } } diff --git a/std/parallelism.d b/std/parallelism.d index 161ba943213..8f461bece68 100644 --- a/std/parallelism.d +++ b/std/parallelism.d @@ -3273,24 +3273,13 @@ terminating the main thread. */ @property TaskPool taskPool() @trusted { - static bool initialized; - __gshared static TaskPool pool; - - if(!initialized) - { - synchronized(typeid(TaskPool)) - { - if(!pool) - { - pool = new TaskPool(defaultPoolThreads); - pool.isDaemon = true; - } - } - - initialized = true; - } - - return pool; + import std.concurrency : initOnce; + __gshared TaskPool pool; + return initOnce!pool({ + auto p = new TaskPool(defaultPoolThreads); + p.isDaemon = true; + return p; + }()); } private shared uint _defaultPoolThreads;