From rhurlin at gwdg.de  Wed Oct 27 21:09:07 2010
From: rhurlin at gwdg.de (Rainer Hurling)
Date: Wed, 27 Oct 2010 21:09:07 +0200
Subject: [Rd] R-2.12.0 hangs while loading RGtk2 on FreeBSD
In-Reply-To: <AANLkTimWCP-XH+NcUNFA13Qq0Szhk_MPQ8_3dbAoUZMq@mail.gmail.com>
References: <4CC03E47.2010800@gwdg.de>	<alpine.LFD.2.00.1010211508350.5999@toucan.stats.ox.ac.uk>	<4CC052D6.3030106@gwdg.de>	<alpine.LFD.2.00.1010211704340.7969@toucan.stats.ox.ac.uk>	<4CC06D6A.8040609@gwdg.de>	<AANLkTimAmo0ro2Tiw_rWAJ732R+ATRgNdS0SvuO6hYq+@mail.gmail.com>	<4CC19D4B.6070605@gwdg.de>	<4CC1EFD0.40400@gwdg.de>	<4CC2AFB8.1060404@gwdg.de>
	<AANLkTimWCP-XH+NcUNFA13Qq0Szhk_MPQ8_3dbAoUZMq@mail.gmail.com>
Message-ID: <4CC878D3.80107@gwdg.de>

On 27.10.2010 15:07 (UTC+1), Michael Lawrence wrote:
> On Sat, Oct 23, 2010 at 2:49 AM, Rainer Hurling <rhurlin at gwdg.de
> <mailto:rhurlin at gwdg.de>> wrote:
>     On 22.10.2010 22:10 (UTC+1), Rainer Hurling wrote:
>         On 22.10.2010 16:18 (UTC+2), Rainer Hurling wrote:
>             On 22.10.2010 14:57 (UTC+1), Michael Lawrence wrote:
>
>                 On Thu, Oct 21, 2010 at 9:42 AM, Rainer Hurling
>                 <rhurlin at gwdg.de <mailto:rhurlin at gwdg.de>
>                 <mailto:rhurlin at gwdg.de <mailto:rhurlin at gwdg.de>>> wrote:
>
>                 [moved from R-help]
>
>                 On 21.10.2010 18:09 (UTC+1), Prof Brian Ripley wrote:
>
>                 If you do R CMD INSTALL --no-test-load this will skip
>                 the part
>                 that is
>                 hanging and you can try loading in stages (e.g. dyn.load
>                 on the
>                 RGtk2.so).
>
>                 With '--no-test-load' it installs and ends normal.
>                 Loading per
>                 dyn.load("RGtk2.so") works, just as
>                 dyn.load("RGtk2.so",F) and
>                 dyn.load("RGtk2.so",,F). Unloading works, too.
>
>                 Normal loading over library(RGtk2) within R does not
>                 work. R than is
>                 hanging.
>
>                 It seems the problem is not with the library itself?
>
>                 It looks like something is happening when initializing
>                 GTK+ and the
>                 event loop. This happens in the function R_gtkInit in
>                 Rgtk.c. If you
>                 could run R -d gdb and break on that function, perhaps
>                 you could step
>                 through until it hangs.
>
>             Michael, thank you for answering. As I wrote earlier (on
>             R-help@),
>             unfortunately I have no experience with debugging (I am not a
>             programmer). So I would need some more assistence.
>
>             Is there a difference between 'library(RGtk2)' and
>             'dyn.load(RGtk2)' in
>             initializing GTK+? I am able to dyn.load, but library does
>             not work.
>
>             After starting with 'R -d gdb' is the following right?
>
>             (gdb) break R_gtkInit
>             Function "R_gtkInit" not defined.
>             Make breakpoint pending on future shared library load? (y or
>             [n]) y
>             Breakpoint 1 (R_gtkInit) pending.
>
>             When I try to proceed, it gives me the following message
>
>             (gdb) run
>             Starting program: /usr/local/lib/R/bin/exec/R
>             /libexec/ld-elf.so.1: Shared object "libRblas.so" not found,
>             required by "R"
>             Program exited with code 01.
>
>         Ok, I am one step further now:
>
>         (gdb) run
>         Starting program: /usr/local/lib/R/bin/exec/R
>         [..SNIP..]
>          > library(RGtk2)
>         [New LWP 100174]
>         Breakpoint 2 at 0x318bd490: file Rgtk.c, line 104.
>         Pending breakpoint "R_gtkInit" resolved
>         [New Thread 2f408b00 (LWP 100174)]
>         [Switching to Thread 2f408b00 (LWP 100174)]
>
>         Breakpoint 2, R_gtkInit (rargc=0x30b11d10, rargv=0x30a98458,
>         success=0x30afbad0) at Rgtk.c:104
>         104 Rgtk.c: No such file or directory.
>         in Rgtk.c
>         (gdb)
>
>         What do you suggest I should do next?
>
>     Rgtk.c was not found from gdb because RGtk2 was not build with
>     DEBUG=T and R_KEEP_PKG_SOURCE=yes.
>
>     So this is the next try. I can trace the code until it hangs:
>
>     library(RGtk2)
>     [New LWP 100250]
>     Breakpoint 2 at 0x458bd490: file Rgtk.c, line 104.
>
>     Pending breakpoint "R_gtkInit" resolved
>     [New Thread 4322ef00 (LWP 100250)]
>     [Switching to Thread 4322ef00 (LWP 100250)]
>
>     Breakpoint 2, R_gtkInit (rargc=0x446d0980, rargv=0x44698618,
>     success=0x446d09e0) at Rgtk.c:104
>     104     {
>     (gdb) n
>     107       argc = (int) *rargc;
>     (gdb) n
>     104     {
>     (gdb) n
>     107       argc = (int) *rargc;
>     (gdb) n
>     109       if (!gdk_display_get_default()) {
>     (gdb) n
>     110         gtk_disable_setlocale();
>     (gdb) n
>     111         if (!gtk_init_check(&argc, &rargv)) {
>     (gdb) n
>     121         if (!GDK_DISPLAY()) {
>     (gdb) n
>     127         addInputHandler(R_InputHandlers,
>     ConnectionNumber(GDK_DISPLAY()),
>     (gdb) n
>     132         if (!pipe(fds)) {
>     (gdb) n
>     133           ifd = fds[0];
>     (gdb) n
>     134           ofd = fds[1];
>     (gdb) n
>     135           addInputHandler(R_InputHandlers, ifd,
>     R_gtk_timerInputHandler, 32);
>     (gdb) n
>     133           ifd = fds[0];
>     (gdb) n
>     134           ofd = fds[1];
>     (gdb) n
>     135           addInputHandler(R_InputHandlers, ifd,
>     R_gtk_timerInputHandler, 32);
>     (gdb) n
>     136           if (!g_thread_supported ()) g_thread_init (NULL);
>     (gdb) n
>     137           g_thread_create(R_gtk_timerThreadFunc, NULL, FALSE, NULL);
>     (gdb) n
>
>     Line 138 (R_CStackLimit = -1;) is hanging. It seems there is
>     something wrong with piping the file descriptor?
>
> Thanks for looking into this. It looks like the g_thread_create line is
> hanging. I wonder if your version of GTK+/GLib is not built with
> threading support? But if that were the case, g_thread_init() should
> have aborted. You could try breaking on the R_gtk_timerThreadFunc just
> to see if the thread is executed at all or where it is hanging.


Michael, I have to thank you :-)  I set a break at 
'R_gtk_timerThreadFunc'. It seems this function does not return:


[..see above..]
library(RGtk2)
[New LWP 100172]
Breakpoint 2 at 0x458bd5c0: file Rgtk.c, line 78.
Pending breakpoint "R_gtk_timerThreadFunc" resolved
[New Thread 4322ef00 (LWP 100172)]
[..hanging from here on..]


Next I tried a new run with break at 'g_main_context_new' (line 79), 
which steps into glib-2.0.so.0, before it hangs:


library(RGtk2)
[New LWP 100195]
Breakpoint 2 at 0x47c7c660
Pending breakpoint "g_main_context_new" resolved
[New Thread 4322ef00 (LWP 100195)]
[Switching to Thread 4322ef00 (LWP 100195)]
Breakpoint 2, 0x0000000047c7c660 in g_main_context_new () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_main_context_new,
which has no line number information.
0x0000000047c7aed0 in g_source_set_priority () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_set_priority,
which has no line number information.
0x0000000047c7ac70 in g_main_loop_quit () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_main_loop_quit,
which has no line number information.
0x0000000047c7a280 in g_source_get_context () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_get_context,
which has no line number information.
0x0000000047c7c6f3 in g_main_context_new () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) p ctx
No symbol "ctx" in current context.
(gdb) p data
No symbol "data" in current context.
(gdb) n
Single stepping until exit from function g_main_context_new,
which has no line number information.
0x0000000047c7c8b2 in g_main_context_default () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_main_context_default,
which has no line number information.
0x0000000047c7dea5 in g_source_attach () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_attach,
which has no line number information.
0x0000000047c79c50 in g_list_remove_link () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_list_remove_link,
which has no line number information.
0x0000000047c7dde6 in g_source_attach () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_attach,
which has no line number information.
0x0000000047c7ac70 in g_main_loop_quit () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_main_loop_quit,
which has no line number information.
0x0000000047c7a280 in g_source_get_context () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_get_context,
which has no line number information.
0x0000000047c7de00 in g_source_attach () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_attach,
which has no line number information.
0x0000000047c7a280 in g_source_get_context () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_get_context,
which has no line number information.
0x0000000047c7de11 in g_source_attach () from 
/usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_attach,
which has no line number information.
0x000000004608eec8 in gdk_add_client_message_filter () from 
/usr/local/lib/libgdk-x11-2.0.so.0
(gdb) n
Single stepping until exit from function gdk_add_client_message_filter,
which has no line number information.
[..hanging from here on..]


Is there an easy way to find out if GTK+/GLib is built with threading 
support?

Thanks, Rainer


> Thanks again for taking the time to work on this. Sorry I have been
> non-responsive.
>
> Michael

[..mail deleted from here on..]



[Rd] R-2.12.0 hangs while loading RGtk2 on FreeBSD
Rainer Hurling