patch 7.4.1537
Problem: Too many feature flags for pipes, jobs and channels.
Solution: Only use FEAT_JOB_CHANNEL.
diff --git a/src/os_unix.c b/src/os_unix.c
index 8a61166..f2ae513 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -3919,7 +3919,7 @@
return wait_pid;
}
-#if defined(FEAT_JOB) || !defined(USE_SYSTEM) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || !defined(USE_SYSTEM) || defined(PROTO)
/*
* Parse "cmd" and put the white-separated parts in "argv".
* "argv" is an allocated array with "argc" entries.
@@ -3984,7 +3984,7 @@
}
#endif
-#if !defined(USE_SYSTEM) || defined(FEAT_JOB)
+#if !defined(USE_SYSTEM) || defined(FEAT_JOB_CHANNEL)
static void
set_child_environment(void)
{
@@ -5035,12 +5035,11 @@
#endif /* USE_SYSTEM */
}
-#if defined(FEAT_JOB) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
void
mch_start_job(char **argv, job_T *job, jobopt_T *options UNUSED)
{
pid_t pid;
-# ifdef FEAT_CHANNEL
int fd_in[2]; /* for stdin */
int fd_out[2]; /* for stdout */
int fd_err[2]; /* for stderr */
@@ -5122,7 +5121,6 @@
if (channel == NULL)
goto failed;
}
-# endif
pid = fork(); /* maybe we should use vfork() */
if (pid == -1)
@@ -5133,9 +5131,7 @@
if (pid == 0)
{
-# ifdef FEAT_CHANNEL
int null_fd = -1;
-# endif
/* child */
reset_signals(); /* handle signals normally */
@@ -5149,8 +5145,6 @@
set_child_environment();
- /* TODO: re-enable this when pipes connect without a channel */
-# ifdef FEAT_CHANNEL
if (use_null_for_in || use_null_for_out || use_null_for_err)
null_fd = open("/dev/null", O_RDWR | O_EXTRA, 0);
@@ -5205,7 +5199,6 @@
}
if (null_fd >= 0)
close(null_fd);
-# endif
/* See above for type of argv. */
execvp(argv[0], argv);
@@ -5217,11 +5210,8 @@
/* parent */
job->jv_pid = pid;
job->jv_status = JOB_STARTED;
-# ifdef FEAT_CHANNEL
job->jv_channel = channel; /* ch_refcount was set above */
-# endif
-# ifdef FEAT_CHANNEL
/* child stdin, stdout and stderr */
if (!use_file_for_in)
close(fd_in[0]);
@@ -5240,13 +5230,11 @@
? INVALID_FD : fd_err[0]);
channel_set_job(channel, job, options);
}
-# endif
/* success! */
return;
-failed: ;
-# ifdef FEAT_CHANNEL
+failed:
channel_unref(channel);
if (fd_in[0] >= 0)
close(fd_in[0]);
@@ -5260,7 +5248,6 @@
close(fd_err[0]);
if (fd_err[1] >= 0)
close(fd_err[1]);
-# endif
}
char *
@@ -5560,7 +5547,7 @@
nfd++;
}
# endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
nfd = channel_poll_setup(nfd, &fds);
#endif
@@ -5608,7 +5595,7 @@
finished = FALSE; /* Try again */
}
# endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
if (ret > 0)
ret = channel_poll_check(ret, &fds);
#endif
@@ -5690,7 +5677,7 @@
maxfd = xsmp_icefd;
}
# endif
-# ifdef FEAT_CHANNEL
+# ifdef FEAT_JOB_CHANNEL
maxfd = channel_select_setup(maxfd, &rfds);
# endif
@@ -5772,7 +5759,7 @@
}
}
# endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
if (ret > 0)
ret = channel_select_check(ret, &rfds);
#endif