Tcl Source Code

Check-in [ff93640153]
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-5-branch
Files: files | file ages | folders
SHA1: ff936401538fabe6f1cc63fad9eecd561c1c7643
User & Date: dgp 2012-11-07 17:26:48
Context
2012-11-07
20:49
Import tzdata2012i check-in: d3f74cece8 user: kbk tags: core-8-5-branch
17:36
merge 8.5 check-in: 833ad6022e user: dgp tags: core-8-5-13-rc
17:30
merge mark check-in: bbfde6b0fc user: dgp tags: trunk
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:29
merge-mark check-in: e9a3d02458 user: jan.nijtmans tags: core-8-5-branch
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ChangeLog.






1
2
3
4
5
6
7





2012-11-06  Donal K. Fellows  <[email protected]>

	* library/http/http.tcl (http::Finish): [Bug 3581754]: Ensure that
	callbacks are done at most once to prevent problems with timeouts on a
	keep-alive connection (combined with reentrant http package use)
	causing excessive stack growth. Not a fix for the underlying problem,
	but ensures that pain will be mostly kept away from users.
>
>
>
>
>







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-11-06  Donal K. Fellows  <[email protected]>

	* library/http/http.tcl (http::Finish): [Bug 3581754]: Ensure that
	callbacks are done at most once to prevent problems with timeouts on a
	keep-alive connection (combined with reentrant http package use)
	causing excessive stack growth. Not a fix for the underlying problem,
	but ensures that pain will be mostly kept away from users.

Changes to win/tclWinSock.c.

456
457
458
459
460
461
462
463
464
465
466
467
468
469
470

471
472
473
474
475
476
477
{
    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);







|
<
|
|
|
|
<
|
>







456
457
458
459
460
461
462
463

464
465
466
467

468
469
470
471
472
473
474
475
476
{
    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);