Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset ee9c703 in mainline


Ignore:
Timestamp:
2018-10-08T18:34:29Z (3 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master
Children:
63c1dd5
Parents:
30785f1
git-author:
Jakub Jermar <jakub@…> (2018-10-07 18:54:36)
git-committer:
Jakub Jermar <jakub@…> (2018-10-08 18:34:29)
Message:

Make INTERFACE_LOC_SUPPLIER serial again

This commit entirely reverts commit cbdb38ff8f. The interface
unfortunately cannot be parallel/cloned due to the fact that each loc
supplier connection is stateful and is expected to begin with a
LOC_SERVER_REGISTER call. Failing that, cloned exchanges to the
location service supplier interface immediately fail with EREFUSED,
because the method mismatches.

This results in various sporadic failures to register services or add
services into categories, which in turn results in symptoms such as
non-functioning keyboard and mouse input.

If memory serves well, the issue that cbdb38ff8f addressed was that
category change events can transitively result in new requests to the
interface over the same phone. Around the time of cbdb38ff8f there used
to be a hard limit on the number of concurrent async calls and calls
that exceeded this limit got blocked. This is no longer the case, so the
loc supplier fibril is not waiting for any of its own IPC. Hence
reverting cbdb38ff8f should be safe.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • abi/include/abi/ipc/interfaces.h

    r30785f1 ree9c703  
    117117            FOURCC_COMPACT('v', 's', 'd', 'v') | IFACE_EXCHANGE_PARALLEL | IFACE_MOD_CALLBACK,
    118118        INTERFACE_LOC_SUPPLIER =
    119             FOURCC_COMPACT('l', 'o', 'c', 's') | IFACE_EXCHANGE_PARALLEL,
     119            FOURCC_COMPACT('l', 'o', 'c', 's') | IFACE_EXCHANGE_SERIALIZE,
    120120        INTERFACE_LOC_CONSUMER =
    121121            FOURCC_COMPACT('l', 'o', 'c', 'c') | IFACE_EXCHANGE_SERIALIZE,
  • uspace/srv/locsrv/locsrv.c

    r30785f1 ree9c703  
    13981398        async_answer_0(icall, EOK);
    13991399
     1400        /*
     1401         * Each connection begins by a LOC_SERVER_REGISTER, which precludes us
     1402         * from using parallel exchanges.
     1403         */
     1404        static_assert((INTERFACE_LOC_SUPPLIER & IFACE_EXCHANGE_MASK) ==
     1405            IFACE_EXCHANGE_SERIALIZE);
     1406
    14001407        loc_server_t *server = loc_server_register();
    14011408        if (server == NULL)
Note: See TracChangeset for help on using the changeset viewer.