I don't think we're going to fix this before 4.3.3. Given that it has gone unnoticed since June 2022 (yes '22) and that tampering in this area has a history of popping up complications in other areas, I think we should leave it alone until 4.4.0.
(I see that Ivan and Tomas has been on the issue since I started writing, but the above probably still holds true.) - Peter D. > On 21 Feb 2024, at 08:01 , webmail.gandi.net <phgrosj...@sciviews.org> wrote: > > Thank you, Ivan for this investigation. I inspected the R changes file > (https://cran.r-project.org/doc/manuals/r-devel/NEWS.html) and found nothing > about this. I should inspect the sources too! > > It could possibly break other Tcl/Tk related stuff. The doc about > Tcl_ServiceAll and Tcl_DoOneEvent is confusing. On one hand, it says when Tcl > is used from an external program, Tcl_ServiceAll should be used in its event > loop instead of Tcl_DoOneEvent (and the change in the latest R versions goes > in that direction). But in the other hand, it is indicated that > Tcl_ServiceAll does not always handle all Tcl events and extra Tcl_DoOneEvent > should be called in this case. I think we spotted one case where > Tcl_ServiceAll is not doing its job correctly. There may be others. > > Since the {tcltk} package was working fine with "while > (Tcl_DoOneEvent(TCL_DONT_WAIT) && max_ev) max_ev—;", unless there is a clear > performance enhancement with "while (i-- && Tcl_ServiceAll())", it would > perhaps be wise to revert this back. > > Indeed, when I use this on the server side with R 4.3.2: > > library(tcltk) > cmd <- r"( > proc accept {chan addr port} { ;# Make a proc to accept connections > puts "$addr:$port says [gets $chan]" ;# Receive a string > puts $chan goodbye ;# Send a string > close $chan ;# Close the socket (automatically > flushes) > } ;# > socket -server accept 12345 ;# Create a server socket)" > .Tcl(cmd) > .Tcl("vwait myvar") > > It works again as expected. And vwait is known to call Tcl_DoOneEvent. Of > course, in this case, R is blocked and waits for the `myvar` variable on the > Tcl side. Anyway, the problem seems to be really in Tcl_ServiceAll not > catching all Tcl events. > > All the best, > > Philippe > > ..............................................<°}))><........ > ) ) ) ) ) > ( ( ( ( ( Prof. Philippe Grosjean > ) ) ) ) ) > ( ( ( ( ( Numerical Ecology > ) ) ) ) ) Mons University, Belgium > ( ( ( ( ( > .............................................................. > >> Le 20 févr. 2024 à 17:13, Ivan Krylov via R-devel <r-devel@r-project.org> a >> écrit : >> >> В Tue, 20 Feb 2024 12:27:35 +0100 >> "webmail.gandi.net" <phgrosj...@sciviews.org> пишет: >> >>> When R process #1 is R 4.2.3, it works as expected (whatever version >>> of R #2). When R process #1 is R 4.3.2, nothing is sent or received >>> through the socket apparently, but no error is issued and process #2 >>> seems to be able to connect to the socket. >> >> The difference is related to the change in >> src/library/tcltk/src/tcltk_unix.c. >> >> In R-4.2.1, the function static void TclSpinLoop(void *data) says: >> >> int max_ev = 100; >> /* Tcl_ServiceAll is not enough here, for reasons that escape me */ >> while (Tcl_DoOneEvent(TCL_DONT_WAIT) && max_ev) max_ev--; >> >> In R-devel, the function instead says: >> >> int i = R_TCL_SPIN_MAX; >> while (i-- && Tcl_ServiceAll()) >> ; >> >> Manually calling Tcl_DoOneEvent(0) from the debugger at this point >> makes the Tcl code respond to the connection. Tcl_ServiceAll() seems to >> be still not enough. I'll try reading Tcl documentation to investigate >> this further. >> >> -- >> Best regards, >> Ivan >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel