aboutsummaryrefslogtreecommitdiffstats
path: root/main/zsh/fix-zle-segfault.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/zsh/fix-zle-segfault.patch')
-rw-r--r--main/zsh/fix-zle-segfault.patch94
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
-