summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2012-06-11 13:22:42 +1000
committerAndrew Bartlett <abartlet@samba.org>2012-06-11 13:34:43 +0200
commitc2094e313118c29e1e7540ca8f06f9fe0bd30e16 (patch)
tree62d1a342d2e5ffca2e3ef358271cd28b26a29f13
parent61ab9a4806a4139e783fa0cf5481a7e7f9e46678 (diff)
downloadsamba-c2094e313118c29e1e7540ca8f06f9fe0bd30e16.tar.gz
samba-c2094e313118c29e1e7540ca8f06f9fe0bd30e16.tar.bz2
samba-c2094e313118c29e1e7540ca8f06f9fe0bd30e16.zip
debug: Do not constantly rename logs when max log size = 0
In Samba4, the max log size parameter is not yet connected, so maxlog is 0 This means that we would, on receipt of a -HUP, have all child processes attempt a rename. Now we have the -HUP mean we reopen the logs unconditionally, and then we see if the log is too large (samba3 mode) or simply proceed assuming that someone else has renamed the logs for us. Andrew Bartlett Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> Autobuild-Date(master): Mon Jun 11 13:34:43 CEST 2012 on sn-devel-104
-rw-r--r--lib/util/debug.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/lib/util/debug.c b/lib/util/debug.c
index a990ad5112..15a2452b54 100644
--- a/lib/util/debug.c
+++ b/lib/util/debug.c
@@ -688,25 +688,27 @@ void check_log_size( void )
maxlog = state.settings.max_log_size * 1024;
- if (state.schedule_reopen_logs ||
- (fstat(state.fd, &st) == 0
+ if (state.schedule_reopen_logs) {
+ (void)reopen_logs_internal();
+ }
+
+ if (maxlog && (fstat(state.fd, &st) == 0
&& st.st_size > maxlog )) {
(void)reopen_logs_internal();
- if (state.fd > 0 && fstat(state.fd, &st) == 0) {
- if (st.st_size > maxlog) {
- char *name = NULL;
-
- if (asprintf(&name, "%s.old", state.debugf ) < 0) {
- return;
- }
- (void)rename(state.debugf, name);
-
- if (!reopen_logs_internal()) {
- /* We failed to reopen a log - continue using the old name. */
- (void)rename(name, state.debugf);
- }
- SAFE_FREE(name);
+ if (state.fd > 2 && (fstat(state.fd, &st) == 0
+ && st.st_size > maxlog)) {
+ char *name = NULL;
+
+ if (asprintf(&name, "%s.old", state.debugf ) < 0) {
+ return;
+ }
+ (void)rename(state.debugf, name);
+
+ if (!reopen_logs_internal()) {
+ /* We failed to reopen a log - continue using the old name. */
+ (void)rename(name, state.debugf);
}
+ SAFE_FREE(name);
}
}