Tcl Source Code

Check-in [f3a4fbba3d]
Login

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

Overview
Comment:merge 8.5; stamp release date
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | rc2 | core-8-5-16-rc
Files: files | file ages | folders
SHA1: f3a4fbba3db344a854acea4c407cdb18ad0b53d2
User & Date: dgp 2014-08-22 13:44:23
Context
2014-08-25
13:31
`make dist` allowed README-* fossil droppings to leak into the distribution. Closed-Leaf check-in: 904339cdce user: dgp tags: core-8-5-16-rc, core-8-5-16
2014-08-22
13:44
merge 8.5; stamp release date check-in: f3a4fbba3d user: dgp tags: rc2, core-8-5-16-rc
13:23
Correct performance regression in a series of short binary reads from a socket. Many thanks to Eric... check-in: 70e97884f0 user: dgp tags: core-8-5-branch
2014-08-18
13:28
Improved credit check-in: 6ab6bf99c5 user: dgp tags: rc1, core-8-5-16-rc
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to changes.

7889
7890
7891
7892
7893
7894
7895
7896
	*** POTENTIAL INCOMPATIBILITY ***

2014-08-01 (update) "macosx*-i386-x86_64" "macosx-universal" no longer compatible (kupries)
=> platform 1.0.13

2014-08-12 tzdata updated to Olson's tzdata2014f (kenny)

--- Released 8.5.16, August, 2014 --- http://core.tcl.tk/tcl/ for details







|
7889
7890
7891
7892
7893
7894
7895
7896
	*** POTENTIAL INCOMPATIBILITY ***

2014-08-01 (update) "macosx*-i386-x86_64" "macosx-universal" no longer compatible (kupries)
=> platform 1.0.13

2014-08-12 tzdata updated to Olson's tzdata2014f (kenny)

--- Released 8.5.16, August 25, 2014 --- http://core.tcl.tk/tcl/ for details

Changes to generic/tclIO.c.

7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
	/*
	 * If this channel handler is interested in any of the events that
	 * have occurred on the channel, invoke its procedure.
	 */

	if ((chPtr->mask & mask) != 0) {
	    nh.nextHandlerPtr = chPtr->nextPtr;
	    (*(chPtr->proc))(chPtr->clientData, mask);
	    chPtr = nh.nextHandlerPtr;
	} else {
	    chPtr = chPtr->nextPtr;
	}
    }

    /*







|







7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
	/*
	 * If this channel handler is interested in any of the events that
	 * have occurred on the channel, invoke its procedure.
	 */

	if ((chPtr->mask & mask) != 0) {
	    nh.nextHandlerPtr = chPtr->nextPtr;
	    (*(chPtr->proc))(chPtr->clientData, chPtr->mask & mask);
	    chPtr = nh.nextHandlerPtr;
	} else {
	    chPtr = chPtr->nextPtr;
	}
    }

    /*
8849
8850
8851
8852
8853
8854
8855

8856
8857
8858
8859

8860

8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
	 */

	if (GotFlag(statePtr, CHANNEL_EOF)
		&& (bufPtr == NULL || IsBufferEmpty(bufPtr))) {
	    break;
	}


	/* If there is no full buffer, attempt to create and/or fill one. */

	while (!IsBufferFull(bufPtr)) {
	    int code;



	moreData:
	    code = GetInput(chanPtr);
	    bufPtr = statePtr->inQueueHead;

	    assert (bufPtr != NULL);

	    if (GotFlag(statePtr, CHANNEL_EOF|CHANNEL_BLOCKED)) {
		/* Further reads cannot do any more */
		break;
	    }
	    
	    if (code) {
		/* Read error */
		UpdateInterest(chanPtr);
		TclChannelRelease((Tcl_Channel)chanPtr);
		return -1;
	    }

	    assert (IsBufferFull(bufPtr));
	}

	assert (bufPtr != NULL);

	bytesRead = BytesLeft(bufPtr);
	bytesWritten = bytesToRead;

	TranslateInputEOL(statePtr, p, RemovePoint(bufPtr),
		&bytesWritten, &bytesRead);
	bufPtr->nextRemoved += bytesRead;
	p += bytesWritten;







>
|
|
<
<
>

>

|
<
<
<
<
<
<
<
<
<
<





|
<


<
<







8849
8850
8851
8852
8853
8854
8855
8856
8857
8858


8859
8860
8861
8862
8863










8864
8865
8866
8867
8868
8869

8870
8871


8872
8873
8874
8875
8876
8877
8878
	 */

	if (GotFlag(statePtr, CHANNEL_EOF)
		&& (bufPtr == NULL || IsBufferEmpty(bufPtr))) {
	    break;
	}

	/*
	 * If there is not enough data in the buffers to possibly
	 * complete the read, then go get more.


	 */

	if (bufPtr == NULL || BytesLeft(bufPtr) < bytesToRead) {
	moreData:
	    if (GetInput(chanPtr)) {










		/* Read error */
		UpdateInterest(chanPtr);
		TclChannelRelease((Tcl_Channel)chanPtr);
		return -1;
	    }
	    bufPtr = statePtr->inQueueHead;

	}



	bytesRead = BytesLeft(bufPtr);
	bytesWritten = bytesToRead;

	TranslateInputEOL(statePtr, p, RemovePoint(bufPtr),
		&bytesWritten, &bytesRead);
	bufPtr->nextRemoved += bytesRead;
	p += bytesWritten;

Changes to tests/io.test.

4920
4921
4922
4923
4924
4925
4926


4927

4928
4929
4930
4931
4932
4933
4934
    lappend x [fblocked $f1]
    close $f1
    set x
} {{} 1 hello 0 {} 1}
test io-36.1.1 {Tcl_InputBlocked on nonblocking binary pipe} {stdio openpipe} {
    set f1 [open "|[list [interpreter]]" r+]
    chan configure $f1 -encoding binary -translation lf -eofchar {}


    puts $f1 {puts hello_from_pipe}

    flush $f1
    gets $f1
    fconfigure $f1 -blocking off -buffering full
    puts $f1 {puts hello}
    set x ""
    lappend x [gets $f1]
    lappend x [fblocked $f1]







>
>
|
>







4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
    lappend x [fblocked $f1]
    close $f1
    set x
} {{} 1 hello 0 {} 1}
test io-36.1.1 {Tcl_InputBlocked on nonblocking binary pipe} {stdio openpipe} {
    set f1 [open "|[list [interpreter]]" r+]
    chan configure $f1 -encoding binary -translation lf -eofchar {}
    puts $f1 {
	chan configure stdout -encoding binary -translation lf -eofchar {}
	puts hello_from_pipe
    }
    flush $f1
    gets $f1
    fconfigure $f1 -blocking off -buffering full
    puts $f1 {puts hello}
    set x ""
    lappend x [gets $f1]
    lappend x [fblocked $f1]

Changes to win/tclsh.exe.manifest.in.

26
27
28
29
30
31
32


















33
	    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
	    <!-- Windows 7 -->
	    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
	    <!-- Windows Vista -->
	    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
	</application>
    </compatibility>


















</assembly>







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
	    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
	    <!-- Windows 7 -->
	    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
	    <!-- Windows Vista -->
	    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
	</application>
    </compatibility>
    <asmv3:application>
	<asmv3:windowsSettings
		xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
	    <dpiAware>true</dpiAware>
	</asmv3:windowsSettings>
    </asmv3:application>
    <dependency>
	<dependentAssembly>
	    <assemblyIdentity
		    type="win32"
		    name="Microsoft.Windows.Common-Controls"
		    version="6.0.0.0"
		    processorArchitecture="@MACHINE@"
		    publicKeyToken="6595b64144ccf1df"
		    language="*"
		/>
	</dependentAssembly>
    </dependency>
</assembly>