Tcl Source Code

Check-in [42933eb98a]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:3574493 Avoid hanging on exit due to use of synchronization calls in routines called by DllMain().
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | core-8-4-branch
Files: files | file ages | folders
SHA1: 42933eb98a56005b5237f00db5d71194ac7d4a69
User & Date: dgp 2012-11-07 17:24:12
Context
2012-11-13
21:16
360894 Threads inherit floating point config from their creator thread check-in: 2a5f53e797 user: dgp tags: core-8-4-branch
21:03
merge 8.4 Closed-Leaf check-in: fbae294921 user: dgp tags: bug-3567063
2012-11-07
17:26
3574493 Avoid hanging on exit due to use of synchronization calls in routines called by DllMain(). check-in: ff93640153 user: dgp tags: core-8-5-branch
17:24
3574493 Avoid hanging on exit due to use of synchronization calls in routines called by DllMain(). check-in: 42933eb98a user: dgp tags: core-8-4-branch
15:28
needed for complation with mingw-w64 (autoconf still to be run) check-in: e00aa2ec0b user: jan.nijtmans tags: core-8-4-branch
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ChangeLog.






1
2
3
4
5
6
7





2012-10-03  Don Porter  <[email protected]>

	* generic/tclIO.c:	When checking for std channels being closed,
	compare the channel state, not the channel itself so that stacked
	channels do not cause trouble.

2012-08-17  Jan Nijtmans  <[email protected]>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
2012-11-07  Don Porter  <[email protected]>

	* win/tclWinSock.c:	[Bug 3574493] Avoid hanging on exit due to
	use of synchronization calls in routines called by DllMain().

2012-10-03  Don Porter  <[email protected]>

	* generic/tclIO.c:	When checking for std channels being closed,
	compare the channel state, not the channel itself so that stacked
	channels do not cause trouble.

2012-08-17  Jan Nijtmans  <[email protected]>

Changes to win/tclWinSock.c.

655
656
657
658
659
660
661
662
663
664
665
666
667

668
669
670
671
672
673
674
{
    ThreadSpecificData *tsdPtr;

    tsdPtr = (ThreadSpecificData *)TclThreadDataKeyGet(&dataKey);
    if (tsdPtr != NULL) {
	if (tsdPtr->socketThread != NULL) {
	    if (tsdPtr->hwnd != NULL) {
		PostMessage(tsdPtr->hwnd, SOCKET_TERMINATE, 0, 0);
		/*
		 * Wait for the thread to exit. This ensures that we are
		 * completely cleaned up before we leave this function.
		 */
		WaitForSingleObject(tsdPtr->readyEvent, INFINITE);

		tsdPtr->hwnd = NULL;
	    }
	    CloseHandle(tsdPtr->socketThread);
	    tsdPtr->socketThread = NULL;
	}
	if (tsdPtr->readyEvent != NULL) {
	    CloseHandle(tsdPtr->readyEvent);







|
|
|
|
|
|
>







655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
{
    ThreadSpecificData *tsdPtr;

    tsdPtr = (ThreadSpecificData *)TclThreadDataKeyGet(&dataKey);
    if (tsdPtr != NULL) {
	if (tsdPtr->socketThread != NULL) {
	    if (tsdPtr->hwnd != NULL) {
		if (PostMessage(tsdPtr->hwnd, SOCKET_TERMINATE, 0, 0)) {
		    /*
		     * Wait for the thread to exit. This ensures that we are
		     * completely cleaned up before we leave this function.
		     */
		    WaitForSingleObject(tsdPtr->readyEvent, INFINITE);
		}
		tsdPtr->hwnd = NULL;
	    }
	    CloseHandle(tsdPtr->socketThread);
	    tsdPtr->socketThread = NULL;
	}
	if (tsdPtr->readyEvent != NULL) {
	    CloseHandle(tsdPtr->readyEvent);