Files
gcc/libphobos/libdruntime/core/sync/config.d
Iain Buclaw a2e540bf01 d: Merge dmd, druntime c7902293d7, phobos 03aeafd20
D front-end changes:

	- Import dmd v2.110.0-rc.1.
	- An error is now given for subtracting pointers of different
	  types.

D runtime changes:

	- Import druntime v2.110.0-rc.1.

Phobos changes:

	- Import phobos v2.110.0-rc.1.

gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd c7902293d7.
	* dmd/VERSION: Bump version to v2.110.0-rc.1.

libphobos/ChangeLog:

	* libdruntime/MERGE: Merge upstream druntime c7902293d7.
	* libdruntime/Makefile.am (DRUNTIME_DSOURCES): Rename
	core/thread/fiber.d to core/thread/fiber/package.d.  Add
	core/thread/fiber/base.d.
	* libdruntime/Makefile.in: Regenerate.
	* src/MERGE: Merge upstream phobos 63fdb282f.

gcc/testsuite/ChangeLog:

	* gdc.dg/asm3.d: Adjust test.
	* gdc.dg/torture/pr96435.d: Adjust test.
2025-01-12 23:18:25 +01:00

70 lines
1.9 KiB
D

/**
* The config module contains utility routines and configuration information
* specific to this package.
*
* Copyright: Copyright Sean Kelly 2005 - 2009.
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
* Authors: Sean Kelly
* Source: $(DRUNTIMESRC core/sync/_config.d)
*/
/* Copyright Sean Kelly 2005 - 2009.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
module core.sync.config;
version (Posix)
{
import core.sys.posix.sys.time : gettimeofday, timeval;
import core.sys.posix.time : timespec;
import core.time;
void mktspec( ref timespec t ) nothrow @nogc
{
static if ( is (typeof ( imported!"core.sys.posix.pthread".pthread_condattr_setclock ) ) )
{
import core.sys.posix.time : clock_gettime, CLOCK_MONOTONIC;
clock_gettime( CLOCK_MONOTONIC, &t );
}
else
{
timeval tv;
gettimeofday( &tv, null );
(cast(byte*) &t)[0 .. t.sizeof] = 0;
t.tv_sec = cast(typeof(t.tv_sec)) tv.tv_sec;
t.tv_nsec = cast(typeof(t.tv_nsec)) tv.tv_usec * 1_000;
}
}
void mktspec( ref timespec t, Duration delta ) nothrow @nogc
{
mktspec( t );
mvtspec( t, delta );
}
void mvtspec( ref timespec t, Duration delta ) nothrow @nogc
{
auto val = delta;
val += dur!"seconds"( t.tv_sec );
val += dur!"nsecs"( t.tv_nsec );
//auto val = delta + dur!"seconds"( t.tv_sec ) +
// + dur!"nsecs"( t.tv_nsec );
if ( val.total!"seconds" > t.tv_sec.max )
{
t.tv_sec = t.tv_sec.max;
t.tv_nsec = cast(typeof(t.tv_nsec)) val.split!("seconds", "nsecs")().nsecs;
}
else
val.split!("seconds", "nsecs")(t.tv_sec, t.tv_nsec);
}
}