Long ago, malloc internally had two kinds of failures, warnings and errors.
The 'A' option elevated warningst to errors, and has been the default for some
time. But then warnings were effectively eliminated in favor of everything
being an error, but then the 'a' flag turned errors into warnings!

1. This is bad because it means unconditional failures can now be made
conditional.
2. If you are using 'X' (not recommended imo) then the 'a' option effectively
disables that as well because of the merger.
3. Nobody should be running with 'a' anyway.

We should remove the 'a' option. This diff does. There is now some redundant
code left to handle wrterror() returning which can be removed next.


Index: lib/libc/stdlib/malloc.3
===================================================================
RCS file: /cvs/src/lib/libc/stdlib/malloc.3,v
retrieving revision 1.91
diff -u -p -r1.91 malloc.3
--- lib/libc/stdlib/malloc.3    14 Sep 2015 13:08:01 -0000      1.91
+++ lib/libc/stdlib/malloc.3    30 Dec 2015 06:07:59 -0000
@@ -345,10 +345,7 @@ or
 detect an error condition,
 a message will be printed to file descriptor
 2 (not using stdio).
-Errors will result in the process being aborted,
-unless the
-.Cm a
-option has been specified.
+Errors will result in the process being aborted.
 .Pp
 Here is a brief description of the error messages and what they mean:
 .Bl -tag -width Ds
Index: lib/libc/stdlib/malloc.c
===================================================================
RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
retrieving revision 1.179
diff -u -p -r1.179 malloc.c
--- lib/libc/stdlib/malloc.c    30 Dec 2015 06:04:39 -0000      1.179
+++ lib/libc/stdlib/malloc.c    30 Dec 2015 06:08:00 -0000
@@ -177,7 +177,6 @@ struct chunk_info {
 
 struct malloc_readonly {
        struct dir_info *malloc_pool;   /* Main bookkeeping information */
-       int     malloc_abort;           /* abort() on error */
        int     malloc_freenow;         /* Free quickly - disable chunk rnd */
        int     malloc_freeunmap;       /* mprotect free pages PROT_NONE? */
        int     malloc_hint;            /* call madvice on free pages?  */
@@ -280,8 +279,8 @@ wrterror(char *msg, void *p)
 #endif /* MALLOC_STATS */
 
        errno = saved_errno;
-       if (mopts.malloc_abort)
-               abort();
+
+       abort();
 }
 
 static void
@@ -485,7 +484,6 @@ omalloc_init(struct dir_info **dp)
        /*
         * Default options
         */
-       mopts.malloc_abort = 1;
        mopts.malloc_junk = 1;
        mopts.malloc_move = 1;
        mopts.malloc_cache = MALLOC_DEFAULT_CACHE;
@@ -523,10 +521,8 @@ omalloc_init(struct dir_info **dp)
                                mopts.malloc_cache >>= 1;
                                break;
                        case 'a':
-                               mopts.malloc_abort = 0;
                                break;
                        case 'A':
-                               mopts.malloc_abort = 1;
                                break;
                        case 'c':
                                mopts.malloc_canaries = 0;
Index: share/man/man5/malloc.conf.5
===================================================================
RCS file: /cvs/src/share/man/man5/malloc.conf.5,v
retrieving revision 1.2
diff -u -p -r1.2 malloc.conf.5
--- share/man/man5/malloc.conf.5        9 Dec 2015 14:09:50 -0000       1.2
+++ share/man/man5/malloc.conf.5        30 Dec 2015 06:08:00 -0000
@@ -35,14 +35,6 @@ and finally for the global variable
 and scan them for flags in that order.
 Flags are single letters, uppercase means on, lowercase means off.
 .Bl -tag -width indent
-.It Cm A
-.Dq Abort .
-.Xr malloc 3
-will coredump the process, rather than tolerate internal
-inconsistencies or incorrect usage.
-This is the default and a very handy debugging aid,
-since the core file represents the time of failure,
-rather than when the bogus pointer was used.
 .It Cm C
 .Dq Canaries .
 Add canaries at the end of allocations in order to detect

Reply via email to