Hi,

Using CRT functions in a thread created by CreateThread is potentially unsafe.
(Memory leak might occur.)
Cf.:

  V513. Use _beginthreadex/_endthreadex functions instead of
  CreateThread/ExitThread functions
  http://www.viva64.com/en/d/0102/

I'm not sure the memory leak really occurs on Vim, but using _beginthreadex is
safer than CreateThread.

Attached patch fixes the problem.
Calling _endthreadex instead of ExitThread causes a warning, so I just changed
it to "return 0". _endthreadex is called automatically after returning from
the thread function.

Regards,
Ken Takata

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
# HG changeset patch
# Parent  f79f1b7c404771961bb66eee2af39d7de14cc168

diff --git a/src/os_win32.c b/src/os_win32.c
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -4043,7 +4043,7 @@ sub_process_writer(LPVOID param)
 
     /* finished all the lines, close pipe */
     CloseHandle(g_hChildStd_IN_Wr);
-    ExitThread(0);
+    return 0;
 }
 
 
@@ -4267,8 +4267,8 @@ mch_system_piped(char_u *cmd, int option
 
     if (options & SHELL_WRITE)
     {
-	HANDLE thread =
-	   CreateThread(NULL,  /* security attributes */
+	HANDLE thread = (HANDLE)
+	 _beginthreadex(NULL,  /* security attributes */
 			0,     /* default stack size */
 			sub_process_writer, /* function to be executed */
 			g_hChildStd_IN_Wr,  /* parameter */

Raspunde prin e-mail lui