diff src/channel.c @ 9143:b9c1a397a8a6 v7.4.1855

commit https://github.com/vim/vim/commit/655da31a18ef3f888acf10e68b438e2a851f7b14 Author: Bram Moolenaar <Bram@vim.org> Date: Sat May 28 22:22:34 2016 +0200 patch 7.4.1855 Problem: Valgrind reports memory leak for job that is not freed. Solution: Free all jobs on exit. Add test for failing job.
author Christian Brabandt <cb@256bit.org>
date Sat, 28 May 2016 22:30:06 +0200
parents ddca37101ffb
children 053bc64433ec
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -1285,6 +1285,7 @@ write_buf_line(buf_T *buf, linenr_T lnum
     int	    len = (int)STRLEN(line);
     char_u  *p;
 
+    /* Need to make a copy to be able to append a NL. */
     if ((p = alloc(len + 2)) == NULL)
 	return;
     STRCPY(p, line);
@@ -2888,7 +2889,7 @@ channel_close_now(channel_T *channel)
 /*
  * Read from channel "channel" for as long as there is something to read.
  * "part" is PART_SOCK, PART_OUT or PART_ERR.
- * The data is put in the read queue.
+ * The data is put in the read queue.  No callbacks are invoked here.
  */
     static void
 channel_read(channel_T *channel, int part, char *func)
@@ -4184,6 +4185,15 @@ job_free(job_T *job)
     }
 }
 
+#if defined(EXITFREE) || defined(PROTO)
+    void
+job_free_all(void)
+{
+    while (first_job != NULL)
+	job_free(first_job);
+}
+#endif
+
 /*
  * Return TRUE if the job should not be freed yet.  Do not free the job when
  * it has not ended yet and there is a "stoponexit" flag, an exit callback