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 */