Tcl Source Code

View Ticket
Login
Ticket UUID: 9b63fd201b87c737ef375cd95b5ebbc79629c9ab
Title: Fix Thread Join on WIndows
Type: Bug Version: All
Submitter: konrad.schwarz Created on: 2023-02-20 21:20:43
Subsystem: 80. Thread Package Assigned To: nobody
Priority: 5 Medium Severity: Important
Status: Open Last Modified: 2023-03-29 08:59:56
Resolution: None Closed By: nobody
    Closed on:
Description:
The manual page for Thread states "Windows currently does not support joinable threads. This flag value is therefore ignored on this platform."

A cursory look at the implementation shows that thread joining is implemented, but in a round-about way, using the ThreadJoin module that manages a list of joinable threads.

The proper way to join a thread (i.e., synchronously wait for a thread's termination) in Win32 is to Wait (e.g., WaitForSingleObject()) on the thread handle, returned e.g. by the _beginthreadex() function. The thread's exit status can be retrieved with the Win32 GetExitCodeThread() function. While the thread is still running, this function will return a fixed value (259), but once the thread has exited (when the thread's handle has been signaled), the unadulterated (32-bit) exit code is returned by GetExitCodeThread(). (The MSDN documentation is poorly written, so missing this is quite understandable.)

The current implementation closes this handle immediately, which is a mistake.

If you like, I could probably provide a patch.
User Comments: konrad.schwarz added on 2023-03-29 08:59:56:
Sorry, I misunderstood the fossil patch mechanism.  I was expected it to include commits, but in fact it includes only un-committed changes.

How do I communicate my changes back to you? Can I push to the main Tcl repo?

konrad.schwarz (claiming to be Konrad Schwarz) added on 2023-03-28 19:09:48:
Patch has been added.

jan.nijtmans added on 2023-02-21 07:35:48:

Is this ticket meant for the Thread package or for Tcl itself? See: https://core.tcl-lang.org/thread.

Whatever it's meant for, yes, a patch would help a lot!


Attachments: