diff options
Diffstat (limited to 'main/zsh/fix-zle-segfault.patch')
-rw-r--r-- | main/zsh/fix-zle-segfault.patch | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/main/zsh/fix-zle-segfault.patch b/main/zsh/fix-zle-segfault.patch deleted file mode 100644 index faf6522f91..0000000000 --- a/main/zsh/fix-zle-segfault.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 0c2d823a7955981e88f7cb5b718a7081d97104f0 Mon Sep 17 00:00:00 2001 -From: Peter Stephenson <pws@zsh.org> -Date: Mon, 7 Dec 2015 14:32:52 +0000 -Subject: [PATCH] 37337: Delay freeing widget until not in use. ---- -Alpine notes: -Fixes http://bugs.alpinelinux.org/issues/5699 ---- -index 2d672de..e9b1428 100644 ---- a/Src/Zle/zle.h -+++ b/Src/Zle/zle.h -@@ -213,6 +213,8 @@ struct widget { - #define ZLE_KEEPSUFFIX (1<<9) /* DON'T remove added suffix */ - #define ZLE_NOTCOMMAND (1<<10) /* widget should not alter lastcmd */ - #define ZLE_ISCOMP (1<<11) /* usable for new style completion */ -+#define WIDGET_INUSE (1<<12) /* widget is in use */ -+#define WIDGET_FREE (1<<13) /* request to free when no longer in use */ - - /* thingies */ - -index 38427e8..1f0c07d 100644 ---- a/Src/Zle/zle_main.c -+++ b/Src/Zle/zle_main.c -@@ -1344,6 +1344,8 @@ execzlefunc(Thingy func, char **args, int set_bindk) - eofsent = 1; - ret = 1; - } else { -+ int inuse = wflags & WIDGET_INUSE; -+ w->flags |= WIDGET_INUSE; - if(!(wflags & ZLE_KEEPSUFFIX)) - removesuffix(); - if(!(wflags & ZLE_MENUCMP)) { -@@ -1367,6 +1369,12 @@ execzlefunc(Thingy func, char **args, int set_bindk) - ret = w->u.fn(args); - unqueue_signals(); - } -+ if (!inuse) { -+ if (w->flags & WIDGET_FREE) -+ freewidget(w); -+ else -+ w->flags &= ~WIDGET_INUSE; -+ } - if (!(wflags & ZLE_NOTCOMMAND)) - lastcmd = wflags; - } -@@ -1387,6 +1395,8 @@ execzlefunc(Thingy func, char **args, int set_bindk) - int osc = sfcontext, osi = movefd(0); - int oxt = isset(XTRACE); - LinkList largs = NULL; -+ int inuse = w->flags & WIDGET_INUSE; -+ w->flags |= WIDGET_INUSE; - - if (*args) { - largs = newlinklist(); -@@ -1402,8 +1412,15 @@ execzlefunc(Thingy func, char **args, int set_bindk) - opts[XTRACE] = oxt; - sfcontext = osc; - endparamscope(); -- lastcmd = w->flags; -- w->flags = 0; -+ lastcmd = w->flags & ~(WIDGET_INUSE|WIDGET_FREE); -+ if (inuse) { -+ w->flags &= WIDGET_INUSE|WIDGET_FREE; -+ } else { -+ if (w->flags & WIDGET_FREE) -+ freewidget(w); -+ else -+ w->flags = 0; -+ } - r = 1; - redup(osi, 0); - } -index 271fd8e..21495b6 100644 ---- a/Src/Zle/zle_thingy.c -+++ b/Src/Zle/zle_thingy.c -@@ -253,9 +253,14 @@ unbindwidget(Thingy t, int override) - /* Free a widget. */ - - /**/ --static void -+void - freewidget(Widget w) - { -+ if (w->flags & WIDGET_INUSE) { -+ w->flags |= WIDGET_FREE; -+ return; -+ } -+ - if (w->flags & WIDGET_NCOMP) { - zsfree(w->u.comp.wid); - zsfree(w->u.comp.func); --- -2.10.0 - |