pike.git/
src/
builtin_functions.c
Branch:
Tag:
Non-build tags
All tags
No tags
2011-11-16
2011-11-16 22:52:20 by Tobias S. Josefowitz <tobij@tobij.de>
f01020a08a9356ad2acce17dd451e166d854d6af (
25
lines) (+
16
/-
9
)
[
Show
|
Annotate
]
Branch:
7.9
Change in internal timehandling; ability to invalidate current_time.
2930:
*/ PMOD_EXPORT void f_time(INT32 args) {
+
struct timeval ret;
if(!args || (TYPEOF(Pike_sp[-args]) == T_INT && Pike_sp[-args].u.integer == 0)) {
-
GETTIMEOFDAY(&
current
_
time
);
+
ACCURATE_
GETTIMEOFDAY(&
ret);
+
pop
_
n_elems(args
);
+
push_int(ret.tv_sec);
+
+
return;
}else{ if(TYPEOF(Pike_sp[-args]) == T_INT && Pike_sp[-args].u.integer > 1) { struct timeval tmp;
-
GETTIMEOFDAY(&
current_time
);
+
ACCURATE_
GETTIMEOFDAY(&
ret
);
tmp.tv_sec=Pike_sp[-args].u.integer; tmp.tv_usec=0;
-
my_subtract_timeval(&tmp,&
current_time
);
+
my_subtract_timeval(&tmp,&
ret
);
pop_n_elems(args); push_float( - (FLOAT_TYPE)tmp.tv_sec-((FLOAT_TYPE)tmp.tv_usec)/1000000 ); return; } } pop_n_elems(args);
-
push_int(
current_time
.tv_sec);
+
INACCURATE_GETTIMEOFDAY(&ret);
+
push_int(
ret
.tv_sec);
} /*! @decl string crypt(string password)
4662:
if (t0 == -1) { /* Paranoia in case get_real_time fails. */ /* fprintf (stderr, "get_real_time failed in sleep()\n"); */
-
GETTIMEOFDAY (>od_t0);
+
ACCURATE_
GETTIMEOFDAY (>od_t0);
gtod_tv = gtod_t0; } #define FIX_LEFT() \ if (t0 == -1) { \
-
GETTIMEOFDAY (>od_tv);
\
+
ACCURATE_
GETTIMEOFDAY (>od_tv); \
left = delay - ((gtod_tv.tv_sec-gtod_t0.tv_sec) + \ (gtod_tv.tv_usec-gtod_t0.tv_usec)*1e-6); \ } \
4690:
sysleep(left); THREADS_DISALLOW(); if(do_abort_on_signal) {
-
GETTIMEOFDAY (¤t
_
time
);
+
INVALIDATE_CURRENT_TIME
();
return; } FIX_LEFT();
4698:
break; check_threads_etc(); }
-
GETTIMEOFDAY (¤t
_
time
);
+
INVALIDATE_CURRENT_TIME
();
} if (do_microsleep) { if (t0 == -1) { while (delay> ((gtod_tv.tv_sec-gtod_t0.tv_sec) + (gtod_tv.tv_usec-gtod_t0.tv_usec)*1e-6))
-
GETTIMEOFDAY (>od_tv);
+
ACCURATE_
GETTIMEOFDAY (>od_tv);
} else { while (delay> (tv - t0) * (1.0 / CPU_TIME_TICKS))