diff src/os_unix.c @ 8491:daebcbd87bd3 v7.4.1536

commit https://github.com/vim/vim/commit/de27989157f35172b25f9e01e0c147ed8f6ae3ce Author: Bram Moolenaar <Bram@vim.org> Date: Fri Mar 11 22:19:44 2016 +0100 patch 7.4.1536 Problem: Cannot re-use a channel for another job. Solution: Add the "channel" option to job_start().
author Christian Brabandt <cb@256bit.org>
date Fri, 11 Mar 2016 22:30:04 +0100
parents d0717262d802
children caed4b2d305f
line wrap: on
line diff
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5111,7 +5111,14 @@ mch_start_job(char **argv, job_T *job, j
 
     if (!use_null_for_in || !use_null_for_out || !use_null_for_err)
     {
-	channel = add_channel();
+	if (options->jo_set & JO_CHANNEL)
+	{
+	    channel = options->jo_channel;
+	    if (channel != NULL)
+		++channel->ch_refcount;
+	}
+	else
+	    channel = add_channel();
 	if (channel == NULL)
 	    goto failed;
     }
@@ -5211,7 +5218,7 @@ mch_start_job(char **argv, job_T *job, j
     job->jv_pid = pid;
     job->jv_status = JOB_STARTED;
 # ifdef FEAT_CHANNEL
-    job->jv_channel = channel;
+    job->jv_channel = channel;  /* ch_refcount was set above */
 # endif
 
 # ifdef FEAT_CHANNEL
@@ -5232,9 +5239,6 @@ mch_start_job(char **argv, job_T *job, j
 		      use_out_for_err || use_file_for_err || use_null_for_err
 						    ? INVALID_FD : fd_err[0]);
 	channel_set_job(channel, job, options);
-#  ifdef FEAT_GUI
-	channel_gui_register(channel);
-#  endif
     }
 # endif
 
@@ -5243,8 +5247,7 @@ mch_start_job(char **argv, job_T *job, j
 
 failed: ;
 # ifdef FEAT_CHANNEL
-    if (channel != NULL)
-	channel_free(channel);
+    channel_unref(channel);
     if (fd_in[0] >= 0)
 	close(fd_in[0]);
     if (fd_in[1] >= 0)