summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
0ade8ec)
This makes these values available to all functions in the rest of the
program, even if the particular event before/after function doesn't
pass them on.
We give variables new names so that we can introduce convenience
pointer aliases; that way, all the other references in the whole
program can remain unchanged when we remove now and tv_now from the
beforepoll/afterpoll parameter lists.
The pointer aliases are "static const *const" which is somewhat ugly.
We do this in the hope that the compiler will optimise out the actual
variable, which it couldn't do if the pointer alias had external
linkage. The alternative would be a macro but we don't want to
local scopes (and not just in the current before/afterpoll api).
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
+struct timeval tv_now_global;
+uint64_t now_global;
+
- struct timeval tv_now;
- uint64_t now;
struct poll_interest *i;
int rv, nfds, remain, idx;
int timeout;
struct poll_interest *i;
int rv, nfds, remain, idx;
int timeout;
Message(M_NOTICE,"%s [%d]: starting\n",version,secnet_pid);
do {
Message(M_NOTICE,"%s [%d]: starting\n",version,secnet_pid);
do {
- if (gettimeofday(&tv_now, NULL)!=0) {
+ if (gettimeofday(&tv_now_global, NULL)!=0) {
fatal_perror("main loop: gettimeofday");
}
fatal_perror("main loop: gettimeofday");
}
- now=((uint64_t)tv_now.tv_sec*(uint64_t)1000)+
- ((uint64_t)tv_now.tv_usec/(uint64_t)1000);
+ now_global=((uint64_t)tv_now_global.tv_sec*(uint64_t)1000)+
+ ((uint64_t)tv_now_global.tv_usec/(uint64_t)1000);
idx=0;
for (i=reg; i; i=i->next) {
idx=0;
for (i=reg; i; i=i->next) {
- i->after(i->state, fds+idx, i->nfds, &tv_now, &now);
+ i->after(i->state, fds+idx, i->nfds, &tv_now_global, &now_global);
idx+=i->nfds;
}
remain=total_nfds;
idx+=i->nfds;
}
remain=total_nfds;
timeout=-1;
for (i=reg; i; i=i->next) {
nfds=remain;
timeout=-1;
for (i=reg; i; i=i->next) {
nfds=remain;
- rv=i->before(i->state, fds+idx, &nfds, &timeout, &tv_now, &now);
+ rv=i->before(i->state, fds+idx, &nfds, &timeout, &tv_now_global, &now_global);
if (rv!=0) {
/* XXX we need to handle this properly: increase the
nfds available */
if (rv!=0) {
/* XXX we need to handle this properly: increase the
nfds available */
extern int sys_cmd(const char *file, const char *argc, ...);
extern int sys_cmd(const char *file, const char *argc, ...);
+extern uint64_t now_global;
+extern struct timeval tv_now_global;
+
+static const uint64_t *const now = &now_global;
+static const struct timeval *const tv_now = &tv_now_global;
+
+/* "now" is current program time, in milliseconds. It is derived
+ from tv_now. Both are provided by the event loop. */
+
/***** END of utility functions *****/
/***** SCHEDULING support */
/***** END of utility functions *****/
/***** SCHEDULING support */