Tcl Source Code

View Ticket
Login
2020-11-17
09:16 Closed ticket [3001677f64]: TCL fails on Check phase (test failure: socket_inet-13.1: Testing use of shared socket between two threads FAILED) plus 7 other changes artifact: 9e8768fdf0 user: oehhar
2017-04-29
04:33 Ticket [3001677f64]: 3 changes artifact: 3399114b95 user: aspect
2017-02-23
08:47 New ticket [3001677f64]. artifact: 2af10e6704 user: oehhar

Ticket UUID: 3001677f646fbff8637c82c9932954ce5d497234
Title: TCL fails on Check phase (test failure: socket_inet-13.1: Testing use of shared socket between two threads FAILED)
Type: Bug Version: 8.6.4
Submitter: oehhar Created on: 2017-02-23 08:47:37
Subsystem: 25. Channel System Assigned To: nobody
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2020-11-17 09:16:20
Resolution: Later Closed By: oehhar
    Closed on: 2020-11-17 09:16:20
Description:
Hello,
I´m trying to build 'tcl' version 8.6.4 on GNU/Hurd system through Guix package manager, in the 'Check' phase stops.

Any ideas about what's going on?

/------------------------------------------------/
socket.test


==== socket_inet-13.1 Testing use of shared socket between two threads FAILED
==== Contents of test case:

    # create a thread
    set serverthread [thread::create -preserved [string map [list @localhost@ $localhost] {
        set f [socket -server accept -myaddr @localhost@ 0]
        set listen [lindex [fconfigure $f -sockname] 2]
        proc accept {s a p} {
            fileevent $s readable [list echo $s]
            fconfigure $s -buffering line
        }
        proc echo {s} {
             global i
             set l [gets $s]
             if {[eof $s]} {
                 global x
                 close $s
                 set x done
             } else {
                 incr i
                 puts $s $l
             }
        }
        set i 0
        vwait x
        close $f
    }]]
    set port [thread::send $serverthread {set listen}]
    set s [socket $localhost $port]
    fconfigure $s -buffering line
    catch {
        puts $s "hello"
        gets $s result
    }
    close $s
    thread::release $serverthread
    append result " " [llength [thread::names]]

---- Test generated error; Return code was: 1
---- Return code should have been one of: 0 2
---- errorInfo: thread "tid0x4" does not exist
    while executing
"thread::release $serverthread"
    ("uplevel" body line 34)
    invoked from within
"uplevel 1 $script"
---- errorCode: NONE
==== socket_inet-13.1 FAILED



==== socket_inet6-3.1 socket conflict FAILED
==== Contents of test case:

    socket -server accept -myaddr $localhost $listen

---- Test completed normally; Return code was: 0
---- Return code should have been one of: 1
==== socket_inet6-3.1 FAILED



==== socket_inet6-11.6 socket conflict FAILED
==== Contents of test case:

    set s2 [socket -server accept -myaddr $localhost [getPort $s1]]
    list [getPort $s2] [close $s2]

---- Test completed normally; Return code was: 0
---- Return code should have been one of: 1
==== socket_inet6-11.6 FAILED

/------------------------------------------------/
User Comments: oehhar added on 2020-11-17 09:16:20:

no follow-up closing


aspect added on 2017-04-29 04:33:26:
It looks to me like the serverthread script needs [thread::wait] at the end.

This could also be documented better in thread.man:

$ cat tt.tcl
package require Thread

set t1 [thread::create -preserved {after 50}]
after 100
thread::release $t1

$ tclsh tt.tcl
thread "tid0x7f5e3ca2b700" does not exist
    while executing
"thread::release $t1"
    (file "tt.tcl" line 5)


Even more stark:

% thread::create -preserved {}
thread "tid0x7f177c7d8700" does not exist