patch 7.4.1254
Problem: Opening a second channel causes a crash. (Ken Takata)
Solution: Don't re-allocate the array with channels.
diff --git a/src/channel.c b/src/channel.c
index 2e5965b..9e15fe4 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -133,22 +133,25 @@
add_channel(void)
{
int idx;
- channel_T *new_channels;
channel_T *ch;
if (channels != NULL)
+ {
for (idx = 0; idx < channel_count; ++idx)
if (channels[idx].ch_fd < 0)
/* re-use a closed channel slot */
return idx;
- if (channel_count == MAX_OPEN_CHANNELS)
- return -1;
- new_channels = (channel_T *)alloc(sizeof(channel_T) * (channel_count + 1));
- if (new_channels == NULL)
- return -1;
- if (channels != NULL)
- mch_memmove(new_channels, channels, sizeof(channel_T) * channel_count);
- channels = new_channels;
+ if (channel_count == MAX_OPEN_CHANNELS)
+ return -1;
+ }
+ else
+ {
+ channels = (channel_T *)alloc((int)sizeof(channel_T)
+ * MAX_OPEN_CHANNELS);
+ if (channels == NULL)
+ return -1;
+ }
+
ch = &channels[channel_count];
(void)vim_memset(ch, 0, sizeof(channel_T));