From ba79469c08c12a98a917e64e9adbca3a98224ea0 Mon Sep 17 00:00:00 2001 From: Per Cederqvist <ceder@lysator.liu.se> Date: Wed, 18 Oct 2006 07:00:53 +0000 Subject: [PATCH] Renamed sync_output_header to foutput_header, and clean up the time handling. This is more preparation for bug 1616. * src/server/simple-cache.c (sync_output_header): Renamed to foutput_header and moved to ram-output.c. All callers updated. * src/server/ramkomd.c (current_time): Moved to server-time.c. (main): Use set_initial_time instead of calling gettimeofday and accessing current_time directly. * src/server/ram-output.c, src/server/ram-output.h (foutput_header): Renamed from sync_output_header. Use output_format instead of a hardcoding it to 2. * src/server/dbck.c (main): Call set_initial_time(). * src/server/dbck-cache.c (sync_output_header): Use foutput_header to output a format 2 header. * src/server/server-time.c: New file. (current_time): Moved here from ramkomd.c. * src/server/server-time.c, src/server/server-time.h (set_time): Moved here from connections.c. (set_initial_time): New function. * src/server/connections.c (set_ time): Moved to server-time.c. * src/server/Makefile.am (GENOBJS): Added server-time.c. (DBCK): Ditto. --- ChangeLog | 24 +++++++++++++ src/server/Makefile.am | 4 +-- src/server/connections.c | 25 -------------- src/server/dbck-cache.c | 3 +- src/server/dbck.c | 3 ++ src/server/ram-output.c | 9 +++++ src/server/ram-output.h | 3 ++ src/server/ramkomd.c | 5 +-- src/server/server-time.c | 73 +++++++++++++++++++++++++++++++++++++++ src/server/server-time.h | 3 ++ src/server/simple-cache.c | 11 ++---- 11 files changed, 121 insertions(+), 42 deletions(-) create mode 100644 src/server/server-time.c diff --git a/ChangeLog b/ChangeLog index 1c19aa281..40ecd12e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,27 @@ +2006-10-18 Per Cederqvist <ceder@lysator.liu.se> + + Renamed sync_output_header to foutput_header, and clean up the + time handling. This is more preparation for bug 1616. + * src/server/simple-cache.c (sync_output_header): Renamed to + foutput_header and moved to ram-output.c. All callers updated. + * src/server/ramkomd.c (current_time): Moved to server-time.c. + (main): Use set_initial_time instead of calling gettimeofday and + accessing current_time directly. + * src/server/ram-output.c, src/server/ram-output.h + (foutput_header): Renamed from sync_output_header. Use + output_format instead of a hardcoding it to 2. + * src/server/dbck.c (main): Call set_initial_time(). + * src/server/dbck-cache.c (sync_output_header): Use foutput_header + to output a format 2 header. + * src/server/server-time.c: New file. + (current_time): Moved here from ramkomd.c. + * src/server/server-time.c, src/server/server-time.h + (set_time): Moved here from connections.c. + (set_initial_time): New function. + * src/server/connections.c (set_ time): Moved to server-time.c. + * src/server/Makefile.am (GENOBJS): Added server-time.c. + (DBCK): Ditto. + 2006-10-17 Per Cederqvist <ceder@lysator.liu.se> Added functions wrapper functions around a few stdio functions, diff --git a/src/server/Makefile.am b/src/server/Makefile.am index cdc0f830d..9e992da55 100644 --- a/src/server/Makefile.am +++ b/src/server/Makefile.am @@ -140,7 +140,7 @@ GENOBJS = connections.c log.c $(ATOMS) \ send-async.c server-config.c text-garb.c \ isc-parse.c memory.c $(PROTA) \ internal-connections.c rfc931.c isc-malloc.c \ - conf-file.c local-to-global.c + conf-file.c local-to-global.c server-time.c # Files for lyskomd. @@ -155,7 +155,7 @@ GETOPT = getopt.c getopt1.c NODIST_DBCK = version-info.c DBCK = dbck.c dbck-cache.c ram-smalloc.c ram-parse.c server-config.c \ ram-io.c ram-output.c memory.c conf-file.c $(GETOPT) \ - local-to-global.c lockdb.h lockdb.c + local-to-global.c lockdb.h lockdb.c server-time.c # Files for encrypt (a program to transform the database from unencrypted # apasswords to encrypted). No longer supported. diff --git a/src/server/connections.c b/src/server/connections.c index 1fc33a876..470bef70b 100644 --- a/src/server/connections.c +++ b/src/server/connections.c @@ -185,31 +185,6 @@ queue_remove(Connection *c) update_stat(STAT_RUN_QUEUE, -1); } -void -set_time(void) -{ - struct timeval last_time; - static int limiter = 0; - - last_time = current_time; - if (gettimeofday(¤t_time, NULL) < 0) - { - if (limiter < 50) - { - kom_log("WARNING: gettimeofday failed: %s\n", strerror(errno)); - if (++limiter == 50) - kom_log("WARNING: will not log the above message again.\n"); - } - } - - if (timeval_less(current_time, last_time)) - { - kom_log("WARNING: Time moved backward at least %g seconds.\n", - timeval_diff_d(last_time, current_time)); - /* FIXME (bug 62): Should we take more decisive action here? */ - } -} - static void logout_client(Connection *cp) { diff --git a/src/server/dbck-cache.c b/src/server/dbck-cache.c index 2bf5f2b66..6eab6efa8 100644 --- a/src/server/dbck-cache.c +++ b/src/server/dbck-cache.c @@ -561,8 +561,7 @@ sync_output_header(FILE* fp, const char *state, int oformat) fprintf(fp, "%s:%05ld\n", state, (long)oformat); break; case 2: - fprintf(fp, "%s:%05ld\n", state, (long)oformat); - fprintf(fp, "%020lu\n", (unsigned long)time(NULL)); + foutput_header(fp, state, 1); break; default: restart_kom("sync_output_header(): Unknown output format %d", diff --git a/src/server/dbck.c b/src/server/dbck.c index 653b9233b..fd893237d 100644 --- a/src/server/dbck.c +++ b/src/server/dbck.c @@ -83,6 +83,7 @@ #include "linkansi.h" #include "eintr.h" #include "kom-memory.h" +#include "server-time.h" #define OPT_PERS_PRESENTATION_CONF 1 @@ -1436,6 +1437,8 @@ main (int argc, int need_rw = 0; int have_lock = 0; + set_initial_time(); + link_ansi(); #ifdef TRACED_ALLOCATIONS diff --git a/src/server/ram-output.c b/src/server/ram-output.c index d12420c7a..56bba7729 100644 --- a/src/server/ram-output.c +++ b/src/server/ram-output.c @@ -49,6 +49,7 @@ #include "lyskomd.h" #include "log.h" #include "local-to-global.h" +#include "server-time.h" /* Forward declarations. */ static void foutput_aux_item_list(FILE *, const Aux_item_list *); @@ -74,6 +75,14 @@ static void foutput_array_nodata(FILE *fp); static int output_format = 2; +void +foutput_header(FILE* fp, const char *state, int include_timestamp) +{ + fprintf(fp, "%s:%05d\n", state, output_format); /* DIRTY-FLAG and VERSION*/ + if (include_timestamp) + fprintf(fp, "%020lu\n", (unsigned long)current_time.tv_sec); +} + void set_output_format(int fmt) { diff --git a/src/server/ram-output.h b/src/server/ram-output.h index 508f4eaf8..f88ad2035 100644 --- a/src/server/ram-output.h +++ b/src/server/ram-output.h @@ -33,6 +33,9 @@ * Written by ceder 1990-07-13. Rewritten 1990-08-31. */ +extern void +foutput_header(FILE *fp, const char *state, int include_timestamp); + extern void foutput_info(FILE *fp, Info *info); diff --git a/src/server/ramkomd.c b/src/server/ramkomd.c index dd1321f5a..1a5748642 100644 --- a/src/server/ramkomd.c +++ b/src/server/ramkomd.c @@ -118,8 +118,6 @@ typedef int rlim_t; #endif -struct timeval current_time = { 0, 0 }; - #ifndef NDEBUG int buglevel = 0; @@ -596,8 +594,7 @@ main (int argc, link_ansi(); - if (gettimeofday(¤t_time, NULL) < 0) - restart_kom("gettimeofday failed: %s\n", strerror(errno)); + set_initial_time(); #ifdef TRACED_ALLOCATIONS /* We must do this before we allocate any memory... */ diff --git a/src/server/server-time.c b/src/server/server-time.c new file mode 100644 index 000000000..41c3628c9 --- /dev/null +++ b/src/server/server-time.c @@ -0,0 +1,73 @@ +/* + * The current time is kept in a global variable. + * Copyright (C) 1999, 2003 Lysator Academic Computer Association. + * + * This file is part of the LysKOM server. + * + * LysKOM is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * LysKOM is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * along with LysKOM; see the file COPYING. If not, write to + * Lysator, c/o ISY, Linkoping University, S-581 83 Linkoping, SWEDEN, + * or the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + * MA 02139, USA. + * + * Please report bugs at http://bugzilla.lysator.liu.se/. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stddef.h> +#include <errno.h> +#include <string.h> +#include "timewrap.h" + +#include "misc-types.h" +#include "timeval-util.h" +#include "server-time.h" +#include "log.h" +#include "lyskomd.h" + +struct timeval current_time = { 0, 0 }; + +void +set_initial_time(void) +{ + if (gettimeofday(¤t_time, NULL) < 0) + restart_kom("gettimeofday failed: %s\n", strerror(errno)); +} + +void +set_time(void) +{ + struct timeval last_time; + static int limiter = 0; + + last_time = current_time; + if (gettimeofday(¤t_time, NULL) < 0) + { + if (limiter < 50) + { + kom_log("WARNING: gettimeofday failed: %s\n", strerror(errno)); + if (++limiter == 50) + kom_log("WARNING: will not log the above message again.\n"); + } + } + + if (timeval_less(current_time, last_time)) + { + kom_log("WARNING: Time moved backward at least %g seconds.\n", + timeval_diff_d(last_time, current_time)); + /* FIXME (bug 62): Should we take more decisive action here? */ + } +} diff --git a/src/server/server-time.h b/src/server/server-time.h index 2e00dc91b..7f280751a 100644 --- a/src/server/server-time.h +++ b/src/server/server-time.h @@ -23,4 +23,7 @@ * Please report bugs at http://bugzilla.lysator.liu.se/. */ +void set_time(void); +void set_initial_time(void); + extern struct timeval current_time; diff --git a/src/server/simple-cache.c b/src/server/simple-cache.c index dff2dbc08..bdc91a2be 100644 --- a/src/server/simple-cache.c +++ b/src/server/simple-cache.c @@ -1778,13 +1778,6 @@ get_version(const char *fn) return version; } -static void -sync_output_header(FILE* fp, const char *state, int include_timestamp) -{ - fprintf(fp, "%s:%05ld\n", state, 2L); /* DIRTY-FLAG and VERSION*/ - if (include_timestamp) - fprintf(fp, "%020lu\n", (unsigned long)current_time.tv_sec); -} static void pre_sync(void) @@ -1950,7 +1943,7 @@ pre_sync(void) - sync_output_header(file_b, "DIRTY", 1); + foutput_header(file_b, "DIRTY", 1); fprintf(file_b, "#C %d\n", highest_conf_no); fprintf(file_b, "#T %ld\n", highest_text_no); fprintf(file_b, "I"); @@ -2399,7 +2392,7 @@ save_one_text(void) return; } - sync_output_header(file_b, "CLEAN", 0); + foutput_header(file_b, "CLEAN", 0); if ( ferror(file_b) != 0 ) { -- GitLab