git-daemon: use LOG_PID, simplify logging code
Make git-daemon use LOG_PID like most daemons, instead of prepending the pid to the message ourselves, when using syslog(3). Simplify the logging code by setting stderr to line buffered, instead of building a single string and writing it out with a single write(2). Give an extra log message at the daemon start-up. Signed-off-by: Stephen R. van den Berg <srb@cuci.nl> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
df0daf8ac0
commit
6a992e9e1d
47
daemon.c
47
daemon.c
@ -78,38 +78,19 @@ static struct interp interp_table[] = {
|
||||
|
||||
static void logreport(int priority, const char *err, va_list params)
|
||||
{
|
||||
/* We should do a single write so that it is atomic and output
|
||||
* of several processes do not get intermingled. */
|
||||
char buf[1024];
|
||||
int buflen;
|
||||
int maxlen, msglen;
|
||||
|
||||
/* sizeof(buf) should be big enough for "[pid] \n" */
|
||||
buflen = snprintf(buf, sizeof(buf), "[%ld] ", (long) getpid());
|
||||
|
||||
maxlen = sizeof(buf) - buflen - 1; /* -1 for our own LF */
|
||||
msglen = vsnprintf(buf + buflen, maxlen, err, params);
|
||||
|
||||
if (log_syslog) {
|
||||
char buf[1024];
|
||||
vsnprintf(buf, sizeof(buf), err, params);
|
||||
syslog(priority, "%s", buf);
|
||||
return;
|
||||
}
|
||||
|
||||
/* maxlen counted our own LF but also counts space given to
|
||||
* vsnprintf for the terminating NUL. We want to make sure that
|
||||
* we have space for our own LF and NUL after the "meat" of the
|
||||
* message, so truncate it at maxlen - 1.
|
||||
*/
|
||||
if (msglen > maxlen - 1)
|
||||
msglen = maxlen - 1;
|
||||
else if (msglen < 0)
|
||||
msglen = 0; /* Protect against weird return values. */
|
||||
buflen += msglen;
|
||||
|
||||
buf[buflen++] = '\n';
|
||||
buf[buflen] = '\0';
|
||||
|
||||
write_in_full(2, buf, buflen);
|
||||
else {
|
||||
/* Since stderr is set to linebuffered mode, the
|
||||
* logging of different processes will not overlap
|
||||
*/
|
||||
fprintf(stderr, "[%d] ", (int)getpid());
|
||||
vfprintf(stderr, err, params);
|
||||
fputc('\n', stderr);
|
||||
}
|
||||
}
|
||||
|
||||
static void logerror(const char *err, ...)
|
||||
@ -1178,9 +1159,11 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (log_syslog) {
|
||||
openlog("git-daemon", 0, LOG_DAEMON);
|
||||
openlog("git-daemon", LOG_PID, LOG_DAEMON);
|
||||
set_die_routine(daemon_die);
|
||||
}
|
||||
else
|
||||
setlinebuf(stderr); /* avoid splitting a message in the middle */
|
||||
|
||||
if (inetd_mode && (group_name || user_name))
|
||||
die("--user and --group are incompatible with --inetd");
|
||||
@ -1233,8 +1216,10 @@ int main(int argc, char **argv)
|
||||
return execute(peer);
|
||||
}
|
||||
|
||||
if (detach)
|
||||
if (detach) {
|
||||
daemonize();
|
||||
loginfo("Ready to rumble");
|
||||
}
|
||||
else
|
||||
sanitize_stdfds();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user