diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-06-05 12:29:00 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-06-05 12:29:00 +0000 |
commit | ba2ebb820881508c10afcdc3283447de1e4d85c2 (patch) | |
tree | 98dea2b5f7957c1969dca7a75fb8839c7e0cb236 /jabberd | |
parent | 2c586254cf3fd476367b66eb9fab086bbc405674 (diff) | |
download | gsc-ba2ebb820881508c10afcdc3283447de1e4d85c2.tar.gz gsc-ba2ebb820881508c10afcdc3283447de1e4d85c2.tar.bz2 |
* jabberd/jabberd.h: Fix typo
* jabberd/progman.c (struct prog.pidfile): New member
(register_prog): Take 6th argument, specifying the file to be
deleted before startup.
(register_transport, register_jabber_process): Update calls to
register_prog
(prog_start): Remove pidfile if requested
(progman_dump_stats): Minor fix
* jabberd/main.c: New configuration keyword (in `transport'
section): `pidfile'
* doc/gsc.texi: Update
git-svn-id: file:///svnroot/gsc/trunk@258 d2de0444-eb31-0410-8365-af798a554d48
Diffstat (limited to 'jabberd')
-rw-r--r-- | jabberd/jabberd.h | 5 | ||||
-rw-r--r-- | jabberd/main.c | 13 | ||||
-rw-r--r-- | jabberd/progman.c | 39 |
3 files changed, 46 insertions, 11 deletions
diff --git a/jabberd/jabberd.h b/jabberd/jabberd.h index 336a023..ee00e21 100644 --- a/jabberd/jabberd.h +++ b/jabberd/jabberd.h @@ -48,9 +48,10 @@ #define SLEEPTIME 5*60 #define MAXSPAWN 10 -void register_trasport (char *tag, char **argv, int retr[2], char **depv); +void register_transport (char *tag, char **argv, int retr[2], char **depv, + char *pidfile); void register_jabber_process (char *cmd, char *cfg); -void logmsg(int prio, char *fmt, ...); +void logmsg (int prio, char *fmt, ...); void signal_setup (RETSIGTYPE (*sf)(int)); void *emalloc (size_t size); diff --git a/jabberd/main.c b/jabberd/main.c index e726d3a..a206bc9 100644 --- a/jabberd/main.c +++ b/jabberd/main.c @@ -422,6 +422,7 @@ struct transport_rec int retr[2]; int depc; char **depv; + char *pidfile; }; static void @@ -471,6 +472,14 @@ cfg_transport_depend (struct cfg_file *file, char *kw, char *val, void *data) } void +cfg_transport_pidfile (struct cfg_file *file, char *kw, char *val, + void *data) +{ + struct transport_rec *prec = data; + prec->pidfile = strdup (val); +} + +void cfg_transport (struct cfg_file *file, char *kw, char *val, void *unused) { int rc; @@ -484,6 +493,7 @@ cfg_transport (struct cfg_file *file, char *kw, char *val, void *unused) { "stderr", cfg_transport_stderr }, { "facility", cfg_transport_facility }, { "depend", cfg_transport_depend }, + { "pidfile", cfg_transport_pidfile }, { NULL } }; memset (&rec, 0, sizeof rec); @@ -499,9 +509,10 @@ cfg_transport (struct cfg_file *file, char *kw, char *val, void *unused) config_file, file->line, strerror (rc)); return; } - register_transport (rec.tag, argv, rec.retr, rec.depv); + register_transport (rec.tag, argv, rec.retr, rec.depv, rec.pidfile); free (rec.tag); free (rec.command); + free (rec.pidfile); argcv_free (rec.depc, rec.depv); argcv_free (argc, argv); } diff --git a/jabberd/progman.c b/jabberd/progman.c index da53615..240ab16 100644 --- a/jabberd/progman.c +++ b/jabberd/progman.c @@ -38,6 +38,7 @@ struct prog int argc; char **argv; /* Command line arguments */ int retr[2]; + char *pidfile; /* Pidfile location */ time_t timestamp; /* Time of last startup */ size_t count; /* Number of failed starts since timestamp */ int disabled; /* 1 if this entry is disabled */ @@ -116,7 +117,8 @@ register_retr (int type, struct prog *master, pid_t pid) } void -register_prog (int type, char *tag, char **argv, int retr[2], char **depv) +register_prog (int type, char *tag, char **argv, int retr[2], char **depv, + char *pidfile) { struct prog *p, *newp; char *pstr; @@ -153,7 +155,9 @@ register_prog (int type, char *tag, char **argv, int retr[2], char **depv) size += strlen (argv[i]); size += i + sizeof (argv[0]) * (i + 1) + sizeof (*newp) + (tag ? (strlen (tag) + 1) : 0); - + if (pidfile) + size += strlen (pidfile) + 1; + newp = emalloc (size); memset (newp, 0, sizeof(*newp)); newp->type = type; @@ -178,6 +182,14 @@ register_prog (int type, char *tag, char **argv, int retr[2], char **depv) else newp->tag = newp->v.p.argv[0]; + if (pidfile) + { + newp->v.p.pidfile = strcpy (pstr, pidfile); + pstr += strlen (pstr) + 1; + } + else + newp->v.p.pidfile = NULL; + if (depv) { newp->depend = (char**) pstr; @@ -214,12 +226,13 @@ register_prog (int type, char *tag, char **argv, int retr[2], char **depv) } void -register_transport (char *tag, char **argv, int retr[2], char **depv) +register_transport (char *tag, char **argv, int retr[2], char **depv, + char *pidfile) { static char *std_dep[] = { "all", NULL }; if (!depv) depv = std_dep; - register_prog (TYPE_TRANSPORT, tag, argv, retr, depv); + register_prog (TYPE_TRANSPORT, tag, argv, retr, depv, pidfile); } void @@ -236,10 +249,13 @@ register_jabber_process (char *cmd, char *cfg) argv[argc++] = cfg; } if (debug_level > 2) - argv[argc++] = "-D"; + { + argv[argc++] = "-D"; + retr[RETR_ERR] = LOG_DEBUG; + } argv[argc] = NULL; - register_prog (TYPE_CORE, NULL, argv, retr, NULL); + register_prog (TYPE_CORE, NULL, argv, retr, NULL, NULL); } static struct prog * @@ -351,6 +367,13 @@ prog_start (struct prog *prog) logmsg (LOG_DEBUG, "starting %s", prog->tag); + if (prog->v.p.pidfile) + { + if (unlink (prog->v.p.pidfile) && errno != ENOENT) + logmsg (LOG_ERR, "%s: cannot remove pidfile `%s': %s", + prog->tag, prog->v.p.pidfile, strerror (errno)); + } + retr[RETR_OUT] = open_retranslator (prog, RETR_OUT); retr[RETR_ERR] = open_retranslator (prog, RETR_ERR); @@ -597,9 +620,9 @@ progman_dump_stats (const char *filename) else if (prog->v.p.disabled) { char buf[48]; - + time_t t = prog->v.p.timestamp + SLEEPTIME; strftime (buf, sizeof buf, "%c", - localtime (&prog->v.p.timestamp)); + localtime (&t)); fprintf (fp, "[disabled; scheduled for %s]", buf); } else |