Changeset c11ee605 in mainline for uspace/srv/hid/display/input.c


Ignore:
Timestamp:
2020-05-11T15:36:46Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
83cb672
Parents:
e49b7997
Message:

Display server needs some locking

Sometimes destroying a window would race with event delivery. We add
one big lock for the display object that is taken before servicing
any client request or input event.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/display/input.c

    re49b7997 rc11ee605  
    7373        ds_display_t *disp = (ds_display_t *) input->user;
    7474        kbd_event_t event;
     75        errno_t rc;
    7576
    7677        event.type = type;
     
    7980        event.c = c;
    8081
    81         return ds_display_post_kbd_event(disp, &event);
     82        ds_display_lock(disp);
     83        rc = ds_display_post_kbd_event(disp, &event);
     84        ds_display_unlock(disp);
     85        return rc;
    8286}
    8387
     
    8690        ds_display_t *disp = (ds_display_t *) input->user;
    8791        ptd_event_t event;
     92        errno_t rc;
    8893
    8994        event.type = PTD_MOVE;
     
    9196        event.dmove.y = dy;
    9297
    93         return ds_display_post_ptd_event(disp, &event);
     98        ds_display_lock(disp);
     99        rc = ds_display_post_ptd_event(disp, &event);
     100        ds_display_unlock(disp);
     101        return rc;
    94102}
    95103
     
    99107        ds_display_t *disp = (ds_display_t *) input->user;
    100108        ptd_event_t event;
     109        errno_t rc;
    101110
    102111        event.type = PTD_ABS_MOVE;
     
    108117        event.abounds.p1.y = max_y + 1;
    109118
    110         return ds_display_post_ptd_event(disp, &event);
     119        ds_display_lock(disp);
     120        rc = ds_display_post_ptd_event(disp, &event);
     121        ds_display_unlock(disp);
     122        return rc;
    111123}
    112124
     
    115127        ds_display_t *disp = (ds_display_t *) input->user;
    116128        ptd_event_t event;
     129        errno_t rc;
    117130
    118131        event.type = bpress ? PTD_PRESS : PTD_RELEASE;
     
    121134        event.dmove.y = 0;
    122135
    123         return ds_display_post_ptd_event(disp, &event);
     136        ds_display_lock(disp);
     137        rc = ds_display_post_ptd_event(disp, &event);
     138        ds_display_unlock(disp);
     139        return rc;
    124140}
    125141
Note: See TracChangeset for help on using the changeset viewer.