X crashes with more than 2 simultaneous touches

Asked by Amit Nayar

Hi,

I'm getting a fatal X crash when I touch the screen with 3 or more fingers simultaneously.

When applying the touches sequentially there is no crash (I can get > 10 touches on the screen at once without issue).

I'm using geis advanced interface and have set up two subscriptions (on the same window ID & region):
 1. 1 touch touch
 2. 2 touch rotate

Although this crash happens when I only have 1 subscription for 1 touch touches.

This is the log from geis including the X crash (when only setting up 1 subscription):

(initialise phase)
    GEIS(debug)-geis_register_backend:94 back end 0 registered as 'com.canonical.oif.backend.mock'
    GEIS(debug)-geis_register_backend:94 back end 1 registered as 'com.canonical.oif.backend.dbus'
    GEIS(debug)-geis_register_backend:94 back end 2 registered as 'com.canonical.oif.backend.grail'
    GEIS(debug)-geis_backend_by_name:124 creating back end of class "com.canonical.oif.backend.grail"
    GEIS(debug)-geis_register_gesture_class:1221 registering class "Drag" id 0
    GEIS(debug)-geis_register_gesture_class:1221 registering class "Pinch" id 1
    GEIS(debug)-geis_register_gesture_class:1221 registering class "Rotate" id 2
    GEIS(debug)-geis_register_gesture_class:1221 registering class "Tap" id 15
    GEIS(debug)-geis_register_gesture_class:1221 registering class "Touch" id 32
    GEIS(debug)-geis_register_region:1471 registering region
    GEIS(debug)-geis_register_gesture_class:1221 registering class "Flick" id 128

    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x1670170
    GEIS(debug)-geis_register_device:1260 registering device "ELAN Touchscreen" id 50144
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_subscription_new:407 created subscription "1fingerGestures" id 0
    GEIS(debug)-geis_backend_token_activate:63 called
    GEIS(debug)-_geis_grail_activate_with_filters:2347 filter 0x83846a0 'Touch1Touch' matches ALL devices
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-_geis_grail_filter_gestures:2091 mask=0x00000010 start=1 min=1 max=1
    GEIS(debug)-_geis_grail_activate_for_device_region:2220 subscription='1fingerGestures' filter='Touch1Touch' device=50144 'ELAN Touchscreen' window=0x02a00001 ugsub=0x86d3f60
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x1670170
    GEIS(debug)-geis_register_device:1260 registering device "ELAN Touchscreen" id 50144
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
    GEIS(debug)-_input_event_handler:262 input event available

(initalise finished)
(now I tap the screen with 3 fingers)

    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fb10
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x1670170
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fb10
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x1670170
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fb10
    X Error of failed request: BadAccess (attempt to access private resource denied)
      Major opcode of failed request: 131 (XInputExtension)
      Minor opcode of failed request: 53 ()
      Serial number of failed request: 41
      Current serial number in output stream: 43
    GEIS(debug)-_subscription_destroy:425 destroying subscription "1fingerGestures" id 0
    GEIS(debug)-geis_backend_token_deactivate:75 called
    X Error of failed request: BadAccess (attempt to access private resource denied)
      Major opcode of failed request: 131 (XInputExtension)
      Minor opcode of failed request: 53 ()
      Serial number of failed request: 42
      Current serial number in output stream: 44

(end log)

I also get some Geis warnings that seem to be related to X when using the 2 finger gestures - I don't know if these issues are related.
Here is an example of a geis log with the warnings on executing a 2 finger gesture:

    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fa50
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x16700a0
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 19 callback_info=0x169b5e0
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fa50
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x16700a0
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 19 callback_info=0x169b5e0
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fa50
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x16700a0
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 19 callback_info=0x169b5e0
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
    GEIS(debug)-_input_event_handler:262 input event available
    GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200

Here is and overview of the code I'm using to initialise geis

(init:)

    m_geisObject = geis_new(
        GEIS_INIT_GRAIL_BACKEND,
        GEIS_INIT_TRACK_DEVICES, // Report input devices
        GEIS_INIT_TRACK_GESTURE_CLASSES, // Send gesture class events
        GEIS_INIT_NO_ATOMIC_GESTURES, // Disable geis v1 style atomic gestures
        nullptr);

    if (geis_get_configuration(m_geisObject, GEIS_CONFIGURATION_FD, &m_geisFd) != GEIS_STATUS_SUCCESS)
    {
        LOG4CXX_ERROR(m_logger, "error retrieving GEIS fd");
    }
    geis_register_event_callback(m_geisObject, &GeisHelpersAdv::eventCallback, this);
    geis_register_class_callback(m_geisObject, &GeisHelpersAdv::eventCallback, this);
    geis_register_device_callback(m_geisObject, &GeisHelpersAdv::eventCallback, this);

(init complete callback:)

 sub = geis_subscription_new(m_geisObject, "1fingerGestures", GEIS_SUBSCRIPTION_CONT)

 filter = geis_filter_new(m_geisObject, "Touch1Touch");

    geis_filter_add_term(
        filter,
        GEIS_FILTER_REGION,
        GEIS_REGION_ATTRIBUTE_WINDOWID,
        GEIS_FILTER_OP_EQ,
        windowid,
        nullptr);

    geis_filter_add_term(
        filter,
        GEIS_FILTER_CLASS,
        GEIS_CLASS_ATTRIBUTE_NAME, GEIS_FILTER_OP_EQ, GEIS_GESTURE_TOUCH,
        GEIS_GESTURE_ATTRIBUTE_TOUCHES, GEIS_FILTER_OP_EQ, 1,
        nullptr);

 geis_subscription_add_filter(sub, filter)
 geis_subscription_activate(sub)

Can anyone help me on this issue? Does geis fully support X? Is there another window manager that works better with Geis?

Let me know if any more details are needed.

Thanks in advance,

Amit

Question information

Language:
English Edit question
Status:
Expired
For:
Geis Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Launchpad Janitor (janitor) said :
#1

This question was expired because it remained in the 'Open' state without activity for the last 15 days.

Revision history for this message
Amit Nayar (amit-nyr) said :
#2

Re-opening as this is still an issue.

It appears to happen mostly when I am subscribing to 1 finger gestures. If I only add subscriptions for 2 or more then it seems to work. This is a problem however as I need 1 finger gestures!

Revision history for this message
Launchpad Janitor (janitor) said :
#3

This question was expired because it remained in the 'Open' state without activity for the last 15 days.