Deutsch   English   Français   Italiano  
<vaa0mr$r09k$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Harald Oehlmann <wortkarg3@yahoo.com>
Newsgroups: comp.lang.tcl
Subject: Re: Crash in Itcl when using Iwidgets in multiple threads
Date: Fri, 23 Aug 2024 14:52:43 +0200
Organization: A noiseless patient Spider
Lines: 58
Message-ID: <vaa0mr$r09k$1@dont-email.me>
References: <va9vc0$thcj$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Fri, 23 Aug 2024 14:52:44 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="3742298ef5c040b6e7dd2dfb84c1ea47";
	logging-data="885044"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+nYi7VZ/XGoB3J0T5UFWPd"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:syFblltHly8JAs5TCtK31pZ2HpA=
Content-Language: en-GB
In-Reply-To: <va9vc0$thcj$1@dont-email.me>
Bytes: 2928

Am 23.08.2024 um 14:29 schrieb Petro Kazmirchuk:
> Minimal example:
> 
> package require Thread
> 
> set thread_script {
>      package require Iwidgets
>      iwidgets::pushbutton .btn -text [thread::id]
>      pack .btn
>      after 4000 [list thread::release [thread::id]]
>      thread::wait
> }
> 
> for {set i 0} {$i<1000} {incr i} {
>      thread::create -preserved $thread_script
>      after 500
> }
> 
> This code runs 8 threads in parallel each showing an iwidget (pushbutton 
> or anything else, doesn't matter) and after ~1 minute it crashes with:
> 
> Unhandled exception at 0x00007FF8846DA6E4 (itcl424t.dll) in 
> tclsh86t.exe: 0xC0000005: Access violation reading location 
> 0x0000000000000018.
> 
> Windows, Tcl 8.6.14, Itcl 4.2.4, Itk 4.2.6, Iwidgets 4.1.
> The same crash happens when using the Itk written in pure Tcl: 
> https://chiselapp.com/user/rene/repository/itk/home
> 
> That's why I'm convinced the problem is in Itcl rather than Itk, and the 
> stack trace points to Itcl as well. Probably, there is a mutex missing 
> somewhere.
> 
> I didn't try to reproduce it on Linux.
> 
> I understand that both Iwidgets and Itcl are legacy that is barely 
> maintained, that's why I'm not raising a bug in Fossil that very few 
> people would notice. What I'm asking instead from a much wider audience 
> here is for a workaround. Is it possible to change my code somehow to 
> avoid the crash? Of course, preserving the basic multi-threaded 
> architecture.
> 
> The original code is a huge framework that can't be rewritten to 
> separate GUI into one main thread.
> 
> Thanks in advance,
> Petro

Petro,
if you look here:
https://core.tcl-lang.org/itcl/timeline?udc=1&ss=v&n=&y=all&advm=0
ITCL has commits two days ago. So, there is some care.
It is a bundled package.
So it would be great to file a bug report.

Thanks,
Harald