Clutter is unable to find a valid input backend and abort the execution on ARM
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
clutter-1.0 (Ubuntu) |
Fix Released
|
High
|
Ricardo Salveti | ||
Precise |
Fix Released
|
High
|
Ricardo Salveti | ||
clutter-gst (Ubuntu) |
Invalid
|
High
|
Unassigned | ||
Precise |
Invalid
|
High
|
Unassigned |
Bug Description
Currently on ARM clutter is completely broken because it can find a valid input backend when starting itself.
As a consequence, everyone that depends on clutter at runtime, will fail as well. One example of that is clutter-gst, that breaks the build while running the object introspection (basically because of clutter_gst_init).
To reproduce the issue all you need to do is to run clutter_init, like the small example bellow:
===
#include <clutter/clutter.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
ClutterColor stage_color = { 0x00, 0x00, 0x00, 0xff }; /* Black */
clutter_init (&argc, &argv);
/* Get the stage and set its size and color: */
ClutterActor *stage = clutter_
clutter_
clutter_
/* Show the stage: */
clutter_
/* Start the main loop, so we can respond to events: */
clutter_main ();
return EXIT_SUCCESS;
}
===
If I compile this example and run on my X86 machine, it'll work just fine and a black box will appear at the screen. When running the same example at ARM (ARMHF image on Pandaboard) I get the following:
./main
libEGL warning: DRI2: failed to authenticate
(main:8445): Clutter-ERROR **: Unknown input backend
Trace/breakpoint trap (core dumped)
Changed in clutter-1.0 (Ubuntu): | |
assignee: | nobody → Ricardo Salveti (rsalveti) |
tags: | added: rls-mgr-p-tracking |
Changed in clutter-gst (Ubuntu Precise): | |
importance: | Undecided → High |
The core dump output: sysdeps/ unix/sysv/ linux/arm/ eabi/libc- do-syscall. S:47 sysdeps/ unix/sysv/ linux/pt- raise.c: 46 0xb6ef0614 "Clutter", log_level= G_LOG_LEVEL_ ERROR, format=0xb6efa1ac "Unknown input backend", args1=...) at /build/ buildd/ glib2.0- 2.31.22/ ./glib/ gmessages. c:758
domain_ fatal_mask = <optimized out>
masquerade_ fatal = <optimized out>
was_recursion = 0 <optimized out>, log_level= <optimized out>, format=0xb6efa1ac "Unknown input backend") at /build/ buildd/ glib2.0- 2.31.22/ ./glib/ gmessages. c:792 backend_ real_init_ events (backend=<optimized out>) at ./clutter- backend. c:531 backend_ real_init_ events (backend=0x5f3c10) at ./clutter- backend. c:459
input_ backend = 0x0 backend_ init_events (backend=0x5f3c10) at ./clutter- backend. c:871
__PRETTY_ FUNCTION_ _ = "_clutter_ backend_ init_events" main.c: 1597 main.c: 1783
clutter_ context = 0x5f1a20 main.c: 1751 context_ parse (context=<optimized out>, argc=0xbe83d664, argv=0xbe83d660, error=<optimized out>) at /build/ buildd/ glib2.0- 2.31.22/ ./glib/ goption. c:2025 main.c: 2019
clutter_ group = <optimized out>
internal_ error = 0x0
option_ context = 0x5f2248 main.c: 2081
(gdb) bt full
#0 __libc_do_syscall () at ../ports/
No locals.
#1 0xb6d5b650 in raise (sig=5) at ../nptl/
_a1 = <optimized out>
_a3tmp = 5
_a1tmp = 7667
_a3 = <optimized out>
_a2tmp = 7667
_a2 = <optimized out>
_name = <optimized out>
_sys_result = <optimized out>
pid = 7667
#2 0xb6da4a94 in g_logv (log_domain=
domain = 0x0
data = <optimized out>
depth = <optimized out>
log_func = <optimized out>
test_level = <optimized out>
was_fatal = 0
i = <optimized out>
#3 0xb6da4b84 in g_log (log_domain=
args = {__ap = 0xbe83d54c}
#4 0xb6ea29be in clutter_
No locals.
#5 clutter_
#6 0xb6ea2f1e in _clutter_
klass = 0x5f00b0
#7 0xb6eb96fa in clutter_init_real (error=<optimized out>) at ./clutter-
ctx = 0x5f1a20
backend = <optimized out>
#8 0xb6eb9840 in post_parse_hook (error=0xbe83d63c, context=<optimized out>, group=<optimized out>, data=<optimized out>) at ./clutter-
backend = 0x5f3c10
#9 post_parse_hook (context=<optimized out>, group=<optimized out>, data=<optimized out>, error=0xbe83d63c) at ./clutter-
No locals.
#10 0xb6da741e in g_option_
i = 1
j = <optimized out>
k = <optimized out>
list = <optimized out>
#11 0xb6eb9a2e in clutter_parse_args (error=0xbe83d638, argv=0xbe83d660, argc=0xbe83d664) at ./clutter-
ret = 1
cogl_group = <optimized out>
#12 clutter_init (argc=0xbe83d664, argv=0xbe83d660) at ./clutter-
ctx = <optimized out>
error = 0x0
res = <optimized out>
#13 0x00008860 in main (argc=1, argv=0xbe83d7c4) at main.c:20
stage_color = {red = 0 '\000', green = 0 '\000', blue = 0 '\000', alpha = 255 '\377'}
stage = 0x0