changeset 11798:4d545cd33f0a v8.0.0781

patch 8.0.0781: MS-Windows: memory leak when using :terminal commit https://github.com/vim/vim/commit/ab6eec3887d68c260b50b1b8f9ed95d49d9306c6 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jul 27 21:46:43 2017 +0200 patch 8.0.0781: MS-Windows: memory leak when using :terminal Problem: MS-Windows: Memory leak when using :terminal. Solution: Handle failures properly. (Ken Takata)
author Christian Brabandt <cb@256bit.org>
date Thu, 27 Jul 2017 22:00:04 +0200
parents 77903d48db15
children 4614433e6af6
files src/terminal.c src/version.c
diffstat 2 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1153,18 +1153,19 @@ dyn_winpty_init(void)
     static int
 term_and_job_init(term_T *term, int rows, int cols, char_u *cmd)
 {
-    WCHAR	    *p = enc_to_utf16(cmd, NULL);
+    WCHAR	    *p;
     channel_T	    *channel = NULL;
     job_T	    *job = NULL;
     jobopt_T	    opt;
     DWORD	    error;
     HANDLE	    jo = NULL, child_process_handle, child_thread_handle;
     void	    *winpty_err;
-    void	    *spawn_config;
+    void	    *spawn_config = NULL;
 
     if (!dyn_winpty_init())
 	return FAIL;
 
+    p = enc_to_utf16(cmd, NULL);
     if (p == NULL)
 	return FAIL;
 
@@ -1227,9 +1228,14 @@ term_and_job_init(term_T *term, int rows
 	goto failed;
 
     if (!AssignProcessToJobObject(jo, child_process_handle))
-	goto failed;
+    {
+	/* Failed, switch the way to terminate process with TerminateProcess. */
+	CloseHandle(jo);
+	jo = NULL;
+    }
 
     winpty_spawn_config_free(spawn_config);
+    vim_free(p);
 
     create_vterm(term, rows, cols);
 
@@ -1246,6 +1252,9 @@ term_and_job_init(term_T *term, int rows
     return OK;
 
 failed:
+    if (spawn_config != NULL)
+	winpty_spawn_config_free(spawn_config);
+    vim_free(p);
     if (channel != NULL)
 	channel_clear(channel);
     if (job != NULL)
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    781,
+/**/
     780,
 /**/
     779,