landronimirc at gmail.com
2010-Jan-16 13:35 UTC
[Rd] 'tcltk' crashes related to event-loops (PR#14187)
--0016e6d464cff5d753047d482362 Content-Type: text/plain; charset=UTF-8 I am experiencing some regular crashes on Debian Linux, 32- and 64-bit, involving 'tcltk' and 'cairoDevice' or 'RGtk2'. They make it very difficult to use tcltk interfaces (Rcmdr) and GTK+ ones (rattle, playwith, etc.) in the same R session. NOTE: Before you continue, please read NOTE2 located towards the end of the message. To reproduce you need to load 'tcltk' and 'cairoDevice' in the same R --vanilla session. When executing the following in that order, in a new terminal window: require(tcltk) require(cairoDevice) ReturnVal <- tkmessageBox(title="Greetings from R TclTk",message="Hello, world!",icon="info",type="ok") ### click "ok" I get a crash (confirmed by Dirk---copied---on his Debian system) with the following message (see R-tcltk-cairoDevice.txt):> The program 'R' received an X Window System error.This probably reflects a bug in the program. The error was 'BadWindow (invalid Window parameter)'. (Details: serial 317 error_code 3 request_code 15 minor_code 0) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) The crash and error are very similar in case of 'RGtk2': require(tcltk) require(RGtk2) ReturnVal <- tkmessageBox(title="Greetings from R TclTk",message="Hello, world!",icon="info",type="ok") ### click "ok" to get the crash There are other ways to obtain the same error messages, but without concurrent crashes. liviu at debian-liv:~$ R --vanilla require(tcltk) fix(iris) ### click "quit" ReturnVal <- tkmessageBox(title="Greetings from R TclTk",message="Hello, world!",icon="info",type="ok") ### click "ok" ReturnVal <- tkmessageBox(title="Greetings from R TclTk",message="Hello, world!",icon="info",type="ok") ### click "ok"; to get the warnings(), this needs done twice Then I get: "There were 16 warnings (use warnings() to see them)"> warnings()Warning messages: 1: In structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), ... : X11 protocol error: BadWindow (invalid Window parameter) [.. and 16 other same messages ..] Yet another way is via Rcmdr, with a slightly different message: liviu at debian-liv:~$ R --vanilla require(Rcmdr) data(iris) ### select "iris" as active dataset ### click "edit" button, then "quit" the editor ### click "view" button, then close the viewer ### close Rcmdr and about 16 such errors will pop up Warning in structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), class = "tclObj") : X11 protocol error: BadWindow (invalid Window parameter) Inverting the order of the calls, say, require(cairoDevice) require(tcltk) sporadically generates tcltk freezes, with a different error message. I will submit a separate bug report on this. NOTE1 I've already contacted in private several R developers (all copied), and below are some comments. On Fri, Jan 8, 2010 at 2:41 PM, Michael Lawrence <lawrence.michael at gene.com> wrote:> From the looks of it, the problem is on the tcltk side. When you load RGtk2, > cairoDevice, or probably any package that links to GTK+ (well technically > Gdk), the X11 error is handled differently. Yes, the error occurs (is > reported?) sooner, which I can't explain, but again there's obviously > something going wrong in tcltk.On 1/11/10, Peter Dalgaard <P.Dalgaard at biostat.ku.dk> wrote:> The warnings have been puzzling me for quite a while in "pure" tcltk > applications. They don't usually cause a crash, though, and the --sync > bit in the message suggests that this comes from error handling outside > of the tcltk package (R doesn't have a --sync option). > > Clearly, this sort of error comes from deleting windows with pending > messages or sending messages to deleted windows, but I never got a > handle on how to debug it. At the root of it is of course the > unconventional way in which the event loop is hacked into the keyboard loop. >NOTE2 It seems that I found a circumstance that might help to explain/track down the underlying issue. Test case 1: - make sure no R session is running - open an R --vanilla session - open a second R --vanilla session in a different terminal/tab - run any of the crash-generating code (see above) - you might *not* get the crash Test case 2: - make sure no R session is running - open an R --vanilla session - require(tcltk) - open a second R --vanilla session in a different terminal/tab - run any of the crash-generating code (see above) - you should get a crash It seems that the "tcltk with GTK" crashes occur when another R instance has tcltk loaded. SYSTEM INFO liviu at debian-liv:~$ uname -a Linux debian-liv 2.6.30-2-amd64 #1 SMP Mon Dec 7 05:21:45 UTC 2009 x86_64 GNU/Linux liviu at debian-liv:~$ cat /etc/apt/sources.list | grep cran2deb deb http://debian.cran.r-project.org/cran2deb/debian-amd64/ testing/> sessionInfo()R version 2.10.1 (2009-12-14) x86_64-pc-linux-gnu locale: [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 [5] LC_MONETARY=C LC_MESSAGES=en_GB.UTF-8 [7] LC_PAPER=en_GB.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] tcltk stats graphics grDevices utils datasets methods [8] base other attached packages: [1] cairoDevice_2.10> version_ platform x86_64-pc-linux-gnu arch x86_64 os linux-gnu system x86_64, linux-gnu status major 2 minor 10.1 year 2009 month 12 day 14 svn rev 50720 language R version.string R version 2.10.1 (2009-12-14) --0016e6d464cff5d753047d482362 Content-Type: text/plain; charset=US-ASCII; name="R-tcltk-cairoDevice.txt" Content-Disposition: attachment; filename="R-tcltk-cairoDevice.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4icq5rx1 bGl2aXVAZGViaWFuLWxpdjp+JCBSIC0tdmFuaWxsYQoKUiB2ZXJzaW9uIDIuMTAuMSAoMjAwOS0x Mi0xNCkKQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBSIEZvdW5kYXRpb24gZm9yIFN0YXRpc3RpY2Fs IENvbXB1dGluZwpJU0JOIDMtOTAwMDUxLTA3LTAKClIgaXMgZnJlZSBzb2Z0d2FyZSBhbmQgY29t ZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLgpZb3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0 cmlidXRlIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KVHlwZSAnbGljZW5zZSgpJyBvciAn bGljZW5jZSgpJyBmb3IgZGlzdHJpYnV0aW9uIGRldGFpbHMuCgogIE5hdHVyYWwgbGFuZ3VhZ2Ug c3VwcG9ydCBidXQgcnVubmluZyBpbiBhbiBFbmdsaXNoIGxvY2FsZQoKUiBpcyBhIGNvbGxhYm9y YXRpdmUgcHJvamVjdCB3aXRoIG1hbnkgY29udHJpYnV0b3JzLgpUeXBlICdjb250cmlidXRvcnMo KScgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kCidjaXRhdGlvbigpJyBvbiBob3cgdG8gY2l0ZSBS IG9yIFIgcGFja2FnZXMgaW4gcHVibGljYXRpb25zLgoKVHlwZSAnZGVtbygpJyBmb3Igc29tZSBk ZW1vcywgJ2hlbHAoKScgZm9yIG9uLWxpbmUgaGVscCwgb3IKJ2hlbHAuc3RhcnQoKScgZm9yIGFu IEhUTUwgYnJvd3NlciBpbnRlcmZhY2UgdG8gaGVscC4KVHlwZSAncSgpJyB0byBxdWl0IFIuCgo+ IHJlcXVpcmUodGNsdGspCkxvYWRpbmcgcmVxdWlyZWQgcGFja2FnZTogdGNsdGsKTG9hZGluZyBU Y2wvVGsgaW50ZXJmYWNlIC4uLiBkb25lCj4gcmVxdWlyZShjYWlyb0RldmljZSkKTG9hZGluZyBy ZXF1aXJlZCBwYWNrYWdlOiBjYWlyb0RldmljZQpXYXJuaW5nIG1lc3NhZ2U6CnBhY2thZ2UgJ2Nh aXJvRGV2aWNlJyB3YXMgYnVpbHQgdW5kZXIgUiB2ZXJzaW9uIDIuOS4wIGFuZCBoZWxwIG1heSBu b3Qgd29yayBjb3JyZWN0bHkgCj4gUmV0dXJuVmFsIDwtIHRrbWVzc2FnZUJveCh0aXRsZT0iR3Jl ZXRpbmdzIGZyb20gUiBUY2xUayIsbWVzc2FnZT0iSGVsbG8sIHdvcmxkISIsaWNvbj0iaW5mbyIs dHlwZT0ib2siKQo+ICMjIyBjbGljayAib2siIGFuZCBnZXQgYSBjcmFzaAo+IFRoZSBwcm9ncmFt ICdSJyByZWNlaXZlZCBhbiBYIFdpbmRvdyBTeXN0ZW0gZXJyb3IuClRoaXMgcHJvYmFibHkgcmVm bGVjdHMgYSBidWcgaW4gdGhlIHByb2dyYW0uClRoZSBlcnJvciB3YXMgJ0JhZFdpbmRvdyAoaW52 YWxpZCBXaW5kb3cgcGFyYW1ldGVyKScuCiAgKERldGFpbHM6IHNlcmlhbCAzMTcgZXJyb3JfY29k ZSAzIHJlcXVlc3RfY29kZSAxNSBtaW5vcl9jb2RlIDApCiAgKE5vdGUgdG8gcHJvZ3JhbW1lcnM6 IG5vcm1hbGx5LCBYIGVycm9ycyBhcmUgcmVwb3J0ZWQgYXN5bmNocm9ub3VzbHk7CiAgIHRoYXQg aXMsIHlvdSB3aWxsIHJlY2VpdmUgdGhlIGVycm9yIGEgd2hpbGUgYWZ0ZXIgY2F1c2luZyBpdC4K ICAgVG8gZGVidWcgeW91ciBwcm9ncmFtLCBydW4gaXQgd2l0aCB0aGUgLS1zeW5jIGNvbW1hbmQg bGluZQogICBvcHRpb24gdG8gY2hhbmdlIHRoaXMgYmVoYXZpb3IuIFlvdSBjYW4gdGhlbiBnZXQg YSBtZWFuaW5nZnVsCiAgIGJhY2t0cmFjZSBmcm9tIHlvdXIgZGVidWdnZXIgaWYgeW91IGJyZWFr IG9uIHRoZSBnZGtfeF9lcnJvcigpIGZ1bmN0aW9uLikK --0016e6d464cff5d753047d482362--