ash: even smaller `trap` code
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 25 Sep 2009 00:58:20 +0000 (02:58 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 25 Sep 2009 00:58:20 +0000 (02:58 +0200)
function                                             old     new   delta
evalvar                                             1371    1373      +2
trapcmd                                              347     260     -87

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index 37bdc701a5490adfff1dc1821db26d9987dc0b21..0cada0474169b8f089970a97054f518a143ff5a8 100644 (file)
@@ -4601,8 +4601,7 @@ forkchild(struct job *jp, union node *n, int mode)
                 *
                 * Our solution: ONLY bare $(trap) or `trap` is special.
                 */
-               /* This is needed to prevent EXIT trap firing and such
-                * (trap_ptr will be freed in trapcmd()) */
+               /* This is needed to prevent EXIT trap firing and such */
                trap_ptr = memcpy(xmalloc(sizeof(trap)), trap, sizeof(trap));
        }
        clear_traps();
@@ -12271,14 +12270,18 @@ trapcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
                                                single_quote(tr),
                                                (signo == 0 ? "" : "SIG"),
                                                get_signame(signo));
-                               if (trap_ptr != trap)
-                                       free(tr);
+               /* trap_ptr != trap only if we are in special-cased `trap` code.
+                * In this case, we will exit very soon, no need to free(). */
+                               /* if (trap_ptr != trap) */
+                               /*      free(tr); */
                        }
                }
+               /*
                if (trap_ptr != trap) {
                        free(trap_ptr);
                        trap_ptr = trap;
                }
+               */
                return 0;
        }