dovecot-1.1: Logging: Make sure we don't recurse infinitely when...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Jul 20 17:56:57 EEST 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/6e752477f75c
changeset: 7764:6e752477f75c
user: Timo Sirainen <tss at iki.fi>
date: Sun Jul 20 17:56:52 2008 +0300
description:
Logging: Make sure we don't recurse infinitely when running out of memory.
Also cleaned up the logging handlers' code a bit.
diffstat:
1 file changed, 12 insertions(+), 7 deletions(-)
src/lib/failures.c | 19 ++++++++++++-------
diffs (68 lines):
diff -r 9f597600e1cf -r 6e752477f75c src/lib/failures.c
--- a/src/lib/failures.c Sun Jul 20 17:42:57 2008 +0300
+++ b/src/lib/failures.c Sun Jul 20 17:56:52 2008 +0300
@@ -110,16 +110,15 @@ default_handler(const char *prefix, int
default_handler(const char *prefix, int fd, const char *format, va_list args)
{
static int recursed = 0;
- int ret, old_errno = errno;
+ int ret;
if (recursed >= 2) {
/* we're being called from some signal handler or we ran
out of memory */
- return 0;
+ return -1;
}
recursed++;
-
T_BEGIN {
string_t *str = t_str_new(256);
log_prefix_add(str);
@@ -132,9 +131,7 @@ default_handler(const char *prefix, int
ret = log_fd_write(fd, str_data(str), str_len(str));
} T_END;
- errno = old_errno;
recursed--;
-
return ret;
}
@@ -274,9 +271,8 @@ syslog_handler(int level, enum log_type
{
static int recursed = 0;
- if (recursed != 0)
+ if (recursed >= 2)
return -1;
-
recursed++;
/* syslogs don't generatelly bother to log the level in any way,
@@ -391,8 +387,16 @@ static int ATTR_FORMAT(2, 0)
static int ATTR_FORMAT(2, 0)
internal_handler(char log_type, const char *format, va_list args)
{
+ static int recursed = 0;
int ret;
+ if (recursed >= 2) {
+ /* we're being called from some signal handler or we ran
+ out of memory */
+ return -1;
+ }
+
+ recursed++;
T_BEGIN {
string_t *str;
@@ -404,6 +408,7 @@ internal_handler(char log_type, const ch
ret = write_full(2, str_data(str), str_len(str));
} T_END;
+ recursed--;
return ret;
}
More information about the dovecot-cvs
mailing list