summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/tmux/log.c23
-rw-r--r--usr.bin/tmux/proc.c8
-rw-r--r--usr.bin/tmux/server.c7
-rw-r--r--usr.bin/tmux/signal.c8
-rw-r--r--usr.bin/tmux/tmux.119
-rw-r--r--usr.bin/tmux/tmux.h4
6 files changed, 57 insertions, 12 deletions
diff --git a/usr.bin/tmux/log.c b/usr.bin/tmux/log.c
index 7f153a7b96c..326def980f6 100644
--- a/usr.bin/tmux/log.c
+++ b/usr.bin/tmux/log.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: log.c,v 1.24 2017/02/04 23:42:53 nicm Exp $ */
+/* $OpenBSD: log.c,v 1.25 2017/06/04 08:25:57 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -62,12 +62,10 @@ log_open(const char *name)
if (log_level == 0)
return;
-
- if (log_file != NULL)
- fclose(log_file);
+ log_close();
xasprintf(&path, "tmux-%s-%ld.log", name, (long)getpid());
- log_file = fopen(path, "w");
+ log_file = fopen(path, "a");
free(path);
if (log_file == NULL)
return;
@@ -76,6 +74,21 @@ log_open(const char *name)
event_set_log_callback(log_event_cb);
}
+/* Toggle logging. */
+void
+log_toggle(const char *name)
+{
+ if (log_level == 0) {
+ log_level = 1;
+ log_open(name);
+ log_debug("log opened");
+ } else {
+ log_debug("log closed");
+ log_level = 0;
+ log_close();
+ }
+}
+
/* Close logging. */
void
log_close(void)
diff --git a/usr.bin/tmux/proc.c b/usr.bin/tmux/proc.c
index 9f291be6ff3..56eb2116e98 100644
--- a/usr.bin/tmux/proc.c
+++ b/usr.bin/tmux/proc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: proc.c,v 1.8 2016/01/19 15:59:12 nicm Exp $ */
+/* $OpenBSD: proc.c,v 1.9 2017/06/04 08:25:57 nicm Exp $ */
/*
* Copyright (c) 2015 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -265,3 +265,9 @@ proc_kill_peer(struct tmuxpeer *peer)
{
peer->flags |= PEER_BAD;
}
+
+void
+proc_toggle_log(struct tmuxproc *tp)
+{
+ log_toggle(tp->name);
+}
diff --git a/usr.bin/tmux/server.c b/usr.bin/tmux/server.c
index d61e593a5c1..5aa9b0accad 100644
--- a/usr.bin/tmux/server.c
+++ b/usr.bin/tmux/server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.170 2017/04/22 06:13:30 nicm Exp $ */
+/* $OpenBSD: server.c,v 1.171 2017/06/04 08:25:57 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -151,7 +151,7 @@ server_start(struct event_base *base, int lockfd, char *lockfile)
}
close(pair[0]);
- if (log_get_level() > 3)
+ if (log_get_level() > 1)
tty_create_log();
if (pledge("stdio rpath wpath cpath fattr unix getpw recvfd proc exec "
"tty ps", NULL) != 0)
@@ -365,6 +365,9 @@ server_signal(int sig)
}
server_add_accept(0);
break;
+ case SIGUSR2:
+ proc_toggle_log(server_proc);
+ break;
}
}
diff --git a/usr.bin/tmux/signal.c b/usr.bin/tmux/signal.c
index a2b79c225ce..e34c57f0d3c 100644
--- a/usr.bin/tmux/signal.c
+++ b/usr.bin/tmux/signal.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: signal.c,v 1.10 2016/10/10 21:29:23 nicm Exp $ */
+/* $OpenBSD: signal.c,v 1.11 2017/06/04 08:25:57 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -29,6 +29,7 @@ static struct event ev_sigchld;
static struct event ev_sigcont;
static struct event ev_sigterm;
static struct event ev_sigusr1;
+static struct event ev_sigusr2;
static struct event ev_sigwinch;
void
@@ -59,6 +60,8 @@ set_signals(void (*handler)(int, short, void *), void *arg)
signal_add(&ev_sigterm, NULL);
signal_set(&ev_sigusr1, SIGUSR1, handler, arg);
signal_add(&ev_sigusr1, NULL);
+ signal_set(&ev_sigusr2, SIGUSR2, handler, arg);
+ signal_add(&ev_sigusr2, NULL);
signal_set(&ev_sigwinch, SIGWINCH, handler, arg);
signal_add(&ev_sigwinch, NULL);
}
@@ -92,6 +95,8 @@ clear_signals(int after_fork)
fatal("sigaction failed");
if (sigaction(SIGUSR1, &sigact, NULL) != 0)
fatal("sigaction failed");
+ if (sigaction(SIGUSR2, &sigact, NULL) != 0)
+ fatal("sigaction failed");
if (sigaction(SIGWINCH, &sigact, NULL) != 0)
fatal("sigaction failed");
} else {
@@ -100,6 +105,7 @@ clear_signals(int after_fork)
event_del(&ev_sigcont);
event_del(&ev_sigterm);
event_del(&ev_sigusr1);
+ event_del(&ev_sigusr2);
event_del(&ev_sigwinch);
}
}
diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1
index 2522fbae50c..5fc01f3d6dc 100644
--- a/usr.bin/tmux/tmux.1
+++ b/usr.bin/tmux/tmux.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: tmux.1,v 1.557 2017/06/04 08:02:20 nicm Exp $
+.\" $OpenBSD: tmux.1,v 1.558 2017/06/04 08:25:57 nicm Exp $
.\"
.\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
.\"
@@ -199,7 +199,6 @@ characters to the terminal it is running (if not, they are replaced by
.Ql _ ) .
.It Fl v
Request verbose logging.
-This option may be specified multiple times for increasing verbosity.
Log messages will be saved into
.Pa tmux-client-PID.log
and
@@ -207,6 +206,22 @@ and
files in the current directory, where
.Em PID
is the PID of the server or client process.
+.Pp
+If
+.Fl v
+is specified twice, an additional
+.Pa tmux-out-PID.log
+file is generated with a copy of everything
+.Nm
+writes to the terminal.
+.Pp
+The
+.Dv SIGUSR2
+signal may be sent to the
+.Nm
+server process to toggle logging between on (as if
+.Fl v
+was given) and off.
.It Ar command Op Ar flags
This specifies one of a set of commands used to control
.Nm ,
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index 6c72939808a..9faa25c56be 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.779 2017/05/31 11:00:00 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.780 2017/06/04 08:25:57 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1493,6 +1493,7 @@ struct tmuxpeer *proc_add_peer(struct tmuxproc *, int,
void (*)(struct imsg *, void *), void *);
void proc_remove_peer(struct tmuxpeer *);
void proc_kill_peer(struct tmuxpeer *);
+void proc_toggle_log(struct tmuxproc *);
/* cfg.c */
extern int cfg_finished;
@@ -2336,6 +2337,7 @@ char *get_proc_name(int, char *);
void log_add_level(void);
int log_get_level(void);
void log_open(const char *);
+void log_toggle(const char *);
void log_close(void);
void printflike(1, 2) log_debug(const char *, ...);
__dead void printflike(1, 2) fatal(const char *, ...);