diff options
author | otto <> | 2011-05-20 20:02:08 +0000 |
---|---|---|
committer | otto <> | 2011-05-20 20:02:08 +0000 |
commit | d0016b08961f63bb543c1d7b4d70daf8a703bdc0 (patch) | |
tree | 43693acf54e2214336e48c6c2a28f3c86fc3b085 /src | |
parent | 2d4345005b94282c06777d8e695bb547ed15d577 (diff) | |
download | openbsd-d0016b08961f63bb543c1d7b4d70daf8a703bdc0.tar.gz openbsd-d0016b08961f63bb543c1d7b4d70daf8a703bdc0.tar.bz2 openbsd-d0016b08961f63bb543c1d7b4d70daf8a703bdc0.zip |
save errno dance in wrterror() and malloc_dump(); prompted by and ok deraadt@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libc/stdlib/malloc.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lib/libc/stdlib/malloc.c b/src/lib/libc/stdlib/malloc.c index 8ab9f355e9..bdc6ca69d3 100644 --- a/src/lib/libc/stdlib/malloc.c +++ b/src/lib/libc/stdlib/malloc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: malloc.c,v 1.136 2011/05/18 18:09:37 otto Exp $ */ | 1 | /* $OpenBSD: malloc.c,v 1.137 2011/05/20 20:02:08 otto Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net> | 3 | * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net> |
4 | * | 4 | * |
@@ -236,6 +236,7 @@ wrterror(char *msg, void *p) | |||
236 | char *q = " error: "; | 236 | char *q = " error: "; |
237 | struct iovec iov[6]; | 237 | struct iovec iov[6]; |
238 | char buf[20]; | 238 | char buf[20]; |
239 | int saved_errno = errno; | ||
239 | 240 | ||
240 | iov[0].iov_base = __progname; | 241 | iov[0].iov_base = __progname; |
241 | iov[0].iov_len = strlen(__progname); | 242 | iov[0].iov_len = strlen(__progname); |
@@ -260,7 +261,8 @@ wrterror(char *msg, void *p) | |||
260 | if (mopts.malloc_stats) | 261 | if (mopts.malloc_stats) |
261 | malloc_dump(STDERR_FILENO); | 262 | malloc_dump(STDERR_FILENO); |
262 | #endif /* MALLOC_STATS */ | 263 | #endif /* MALLOC_STATS */ |
263 | //malloc_active--; | 264 | |
265 | errno = saved_errno; | ||
264 | if (mopts.malloc_abort) | 266 | if (mopts.malloc_abort) |
265 | abort(); | 267 | abort(); |
266 | } | 268 | } |
@@ -1620,6 +1622,7 @@ malloc_dump(int fd) | |||
1620 | int i; | 1622 | int i; |
1621 | void *p; | 1623 | void *p; |
1622 | struct region_info *r; | 1624 | struct region_info *r; |
1625 | int saved_errno = errno; | ||
1623 | 1626 | ||
1624 | for (i = 0; i <= MALLOC_DELAYED_CHUNKS; i++) { | 1627 | for (i = 0; i <= MALLOC_DELAYED_CHUNKS; i++) { |
1625 | p = g_pool->delayed_chunks[i]; | 1628 | p = g_pool->delayed_chunks[i]; |
@@ -1634,6 +1637,7 @@ malloc_dump(int fd) | |||
1634 | /* XXX leak when run multiple times */ | 1637 | /* XXX leak when run multiple times */ |
1635 | RB_INIT(&leakhead); | 1638 | RB_INIT(&leakhead); |
1636 | malloc_dump1(fd, g_pool); | 1639 | malloc_dump1(fd, g_pool); |
1640 | errno = saved_errno; | ||
1637 | } | 1641 | } |
1638 | 1642 | ||
1639 | static void | 1643 | static void |