patch 7.4.1322
Problem: Crash when unletting the variable that holds the channel in a
callback function. (Christian Robinson)
Solution: Increase the reference count while invoking the callback.
diff --git a/src/eval.c b/src/eval.c
index a36f3dd..53d41d1 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -7730,12 +7730,21 @@
return OK;
}
-#ifdef FEAT_CHANNEL
- static void
+#if defined(FEAT_CHANNEL) || defined(PROTO)
+/*
+ * Decrement the reference count on "channel" and free it when it goes down to
+ * zero.
+ * Returns TRUE when the channel was freed.
+ */
+ int
channel_unref(channel_T *channel)
{
if (channel != NULL && --channel->ch_refcount <= 0)
+ {
channel_free(channel);
+ return TRUE;
+ }
+ return FALSE;
}
#endif