diff options
author | Ted Unangst <tedu@cvs.openbsd.org> | 2003-10-02 00:02:11 +0000 |
---|---|---|
committer | Ted Unangst <tedu@cvs.openbsd.org> | 2003-10-02 00:02:11 +0000 |
commit | 63cfe7660384af4f7a7d25532c1dceecde46c7eb (patch) | |
tree | bcb2c9113eb0e6810b9988b0381a75bc0feffd34 | |
parent | 0cfbafec03b4d0927fce8bbcbd63b598e42f8cc4 (diff) |
two minor fixes. set errno on recursive calls. ENOMEM suggested by marc@.
lock before setting malloc_func, not after.
ok cloder@ deraadt@
-rw-r--r-- | lib/libc/stdlib/malloc.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index 4e88f1a2a9b..b6762298a19 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -8,7 +8,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$OpenBSD: malloc.c,v 1.61 2003/09/30 00:22:03 tedu Exp $"; +static char rcsid[] = "$OpenBSD: malloc.c,v 1.62 2003/10/02 00:02:10 tedu Exp $"; #endif /* LIBC_SCCS and not lint */ /* @@ -1211,12 +1211,13 @@ malloc(size_t size) { void *r; - malloc_func = " in malloc():"; _MALLOC_LOCK(); + malloc_func = " in malloc():"; if (malloc_active++) { wrtwarning("recursive call\n"); malloc_active--; _MALLOC_UNLOCK(); + errno = EDEADLK; return (NULL); } r = imalloc(size); @@ -1231,12 +1232,13 @@ malloc(size_t size) void free(void *ptr) { - malloc_func = " in free():"; _MALLOC_LOCK(); + malloc_func = " in free():"; if (malloc_active++) { wrtwarning("recursive call\n"); malloc_active--; _MALLOC_UNLOCK(); + errno = EDEADLK; return; } ifree(ptr); @@ -1251,12 +1253,13 @@ realloc(void *ptr, size_t size) { void *r; - malloc_func = " in realloc():"; _MALLOC_LOCK(); + malloc_func = " in realloc():"; if (malloc_active++) { wrtwarning("recursive call\n"); malloc_active--; _MALLOC_UNLOCK(); + errno = EDEADLK; return (NULL); } if (ptr == NULL) { |