Changeset 984a9ba in mainline for uspace/srv/hid/output/output.c


Ignore:
Timestamp:
2018-07-05T09:34:09Z (6 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
63d46341
Parents:
76f566d
Message:

do not expose the call capability handler from the async framework

Keep the call capability handler encapsulated within the async framework
and do not expose it explicitly via its API. Use the pointer to
ipc_call_t as the sole object identifying an IPC call in the code that
uses the async framework.

This plugs a major leak in the abstraction and also simplifies both the
async framework (slightly) and all IPC servers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/output/output.c

    r76f566d r984a9ba  
    7878}
    7979
    80 static void srv_yield(cap_call_handle_t icall_handle, ipc_call_t *icall)
     80static void srv_yield(ipc_call_t *icall)
    8181{
    8282        errno_t ret = EOK;
     
    9090        }
    9191
    92         async_answer_0(icall_handle, ret);
    93 }
    94 
    95 static void srv_claim(cap_call_handle_t icall_handle, ipc_call_t *icall)
     92        async_answer_0(icall, ret);
     93}
     94
     95static void srv_claim(ipc_call_t *icall)
    9696{
    9797        errno_t ret = EOK;
     
    105105        }
    106106
    107         async_answer_0(icall_handle, ret);
    108 }
    109 
    110 static void srv_get_dimensions(cap_call_handle_t icall_handle, ipc_call_t *icall)
     107        async_answer_0(icall, ret);
     108}
     109
     110static void srv_get_dimensions(ipc_call_t *icall)
    111111{
    112112        sysarg_t cols = MAX_COLS;
     
    118118        }
    119119
    120         async_answer_2(icall_handle, EOK, cols, rows);
    121 }
    122 
    123 static void srv_get_caps(cap_call_handle_t icall_handle, ipc_call_t *icall)
     120        async_answer_2(icall, EOK, cols, rows);
     121}
     122
     123static void srv_get_caps(ipc_call_t *icall)
    124124{
    125125        console_caps_t caps = 0;
     
    131131        }
    132132
    133         async_answer_1(icall_handle, EOK, caps);
    134 }
    135 
    136 static frontbuf_t *resolve_frontbuf(sysarg_t handle, cap_call_handle_t icall_handle)
     133        async_answer_1(icall, EOK, caps);
     134}
     135
     136static frontbuf_t *resolve_frontbuf(sysarg_t handle, ipc_call_t *icall)
    137137{
    138138        frontbuf_t *frontbuf = NULL;
     
    145145
    146146        if (frontbuf == NULL) {
    147                 async_answer_0(icall_handle, ENOENT);
     147                async_answer_0(icall, ENOENT);
    148148                return NULL;
    149149        }
     
    152152}
    153153
    154 static void srv_frontbuf_create(cap_call_handle_t icall_handle, ipc_call_t *icall)
     154static void srv_frontbuf_create(ipc_call_t *icall)
    155155{
    156156        frontbuf_t *frontbuf = (frontbuf_t *) malloc(sizeof(frontbuf_t));
    157157        if (frontbuf == NULL) {
    158                 async_answer_0(icall_handle, ENOMEM);
     158                async_answer_0(icall, ENOMEM);
    159159                return;
    160160        }
     
    162162        link_initialize(&frontbuf->link);
    163163
    164         cap_call_handle_t chandle;
    165         if (!async_share_out_receive(&chandle, &frontbuf->size,
     164        ipc_call_t call;
     165        if (!async_share_out_receive(&call, &frontbuf->size,
    166166            &frontbuf->flags)) {
    167167                free(frontbuf);
    168                 async_answer_0(icall_handle, EINVAL);
    169                 return;
    170         }
    171 
    172         errno_t rc = async_share_out_finalize(chandle, &frontbuf->data);
     168                async_answer_0(icall, EINVAL);
     169                return;
     170        }
     171
     172        errno_t rc = async_share_out_finalize(&call, &frontbuf->data);
    173173        if ((rc != EOK) || (frontbuf->data == AS_MAP_FAILED)) {
    174174                free(frontbuf);
    175                 async_answer_0(icall_handle, ENOMEM);
     175                async_answer_0(icall, ENOMEM);
    176176                return;
    177177        }
    178178
    179179        list_append(&frontbuf->link, &frontbufs);
    180         async_answer_1(icall_handle, EOK, (sysarg_t) frontbuf);
    181 }
    182 
    183 static void srv_frontbuf_destroy(cap_call_handle_t icall_handle, ipc_call_t *icall)
    184 {
    185         frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall_handle);
     180        async_answer_1(icall, EOK, (sysarg_t) frontbuf);
     181}
     182
     183static void srv_frontbuf_destroy(ipc_call_t *icall)
     184{
     185        frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall);
    186186        if (frontbuf == NULL)
    187187                return;
     
    191191        free(frontbuf);
    192192
    193         async_answer_0(icall_handle, EOK);
    194 }
    195 
    196 static void srv_cursor_update(cap_call_handle_t icall_handle, ipc_call_t *icall)
    197 {
    198         frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall_handle);
     193        async_answer_0(icall, EOK);
     194}
     195
     196static void srv_cursor_update(ipc_call_t *icall)
     197{
     198        frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall);
    199199        if (frontbuf == NULL)
    200200                return;
     
    223223        }
    224224
    225         async_answer_0(icall_handle, EOK);
    226 }
    227 
    228 static void srv_set_style(cap_call_handle_t icall_handle, ipc_call_t *icall)
     225        async_answer_0(icall, EOK);
     226}
     227
     228static void srv_set_style(ipc_call_t *icall)
    229229{
    230230        list_foreach(outdevs, link, outdev_t, dev) {
     
    234234        }
    235235
    236         async_answer_0(icall_handle, EOK);
    237 }
    238 
    239 static void srv_set_color(cap_call_handle_t icall_handle, ipc_call_t *icall)
     236        async_answer_0(icall, EOK);
     237}
     238
     239static void srv_set_color(ipc_call_t *icall)
    240240{
    241241        list_foreach(outdevs, link, outdev_t, dev) {
     
    249249        }
    250250
    251         async_answer_0(icall_handle, EOK);
    252 }
    253 
    254 static void srv_set_rgb_color(cap_call_handle_t icall_handle, ipc_call_t *icall)
     251        async_answer_0(icall, EOK);
     252}
     253
     254static void srv_set_rgb_color(ipc_call_t *icall)
    255255{
    256256        list_foreach(outdevs, link, outdev_t, dev) {
     
    260260        }
    261261
    262         async_answer_0(icall_handle, EOK);
     262        async_answer_0(icall, EOK);
    263263}
    264264
     
    302302}
    303303
    304 static void srv_update(cap_call_handle_t icall_handle, ipc_call_t *icall)
    305 {
    306         frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall_handle);
     304static void srv_update(ipc_call_t *icall)
     305{
     306        frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall);
    307307        if (frontbuf == NULL)
    308308                return;
     
    348348        }
    349349
    350 
    351         async_answer_0(icall_handle, EOK);
    352 }
    353 
    354 static void srv_damage(cap_call_handle_t icall_handle, ipc_call_t *icall)
    355 {
    356         frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall_handle);
     350        async_answer_0(icall, EOK);
     351}
     352
     353static void srv_damage(ipc_call_t *icall)
     354{
     355        frontbuf_t *frontbuf = resolve_frontbuf(IPC_GET_ARG1(*icall), icall);
    357356        if (frontbuf == NULL)
    358357                return;
     
    388387
    389388        }
    390         async_answer_0(icall_handle, EOK);
    391 }
    392 
    393 static void client_connection(cap_call_handle_t icall_handle, ipc_call_t *icall, void *arg)
     389
     390        async_answer_0(icall, EOK);
     391}
     392
     393static void client_connection(ipc_call_t *icall, void *arg)
    394394{
    395395        /* Accept the connection */
    396         async_answer_0(icall_handle, EOK);
     396        async_answer_0(icall, EOK);
    397397
    398398        while (true) {
    399399                ipc_call_t call;
    400                 cap_call_handle_t chandle = async_get_call(&call);
     400                async_get_call(&call);
    401401
    402402                if (!IPC_GET_IMETHOD(call)) {
    403                         async_answer_0(chandle, EOK);
     403                        async_answer_0(&call, EOK);
    404404                        break;
    405405                }
     
    407407                switch (IPC_GET_IMETHOD(call)) {
    408408                case OUTPUT_YIELD:
    409                         srv_yield(chandle, &call);
     409                        srv_yield(&call);
    410410                        break;
    411411                case OUTPUT_CLAIM:
    412                         srv_claim(chandle, &call);
     412                        srv_claim(&call);
    413413                        break;
    414414                case OUTPUT_GET_DIMENSIONS:
    415                         srv_get_dimensions(chandle, &call);
     415                        srv_get_dimensions(&call);
    416416                        break;
    417417                case OUTPUT_GET_CAPS:
    418                         srv_get_caps(chandle, &call);
     418                        srv_get_caps(&call);
    419419                        break;
    420420
    421421                case OUTPUT_FRONTBUF_CREATE:
    422                         srv_frontbuf_create(chandle, &call);
     422                        srv_frontbuf_create(&call);
    423423                        break;
    424424                case OUTPUT_FRONTBUF_DESTROY:
    425                         srv_frontbuf_destroy(chandle, &call);
     425                        srv_frontbuf_destroy(&call);
    426426                        break;
    427427
    428428                case OUTPUT_CURSOR_UPDATE:
    429                         srv_cursor_update(chandle, &call);
     429                        srv_cursor_update(&call);
    430430                        break;
    431431                case OUTPUT_SET_STYLE:
    432                         srv_set_style(chandle, &call);
     432                        srv_set_style(&call);
    433433                        break;
    434434                case OUTPUT_SET_COLOR:
    435                         srv_set_color(chandle, &call);
     435                        srv_set_color(&call);
    436436                        break;
    437437                case OUTPUT_SET_RGB_COLOR:
    438                         srv_set_rgb_color(chandle, &call);
     438                        srv_set_rgb_color(&call);
    439439                        break;
    440440                case OUTPUT_UPDATE:
    441                         srv_update(chandle, &call);
     441                        srv_update(&call);
    442442                        break;
    443443                case OUTPUT_DAMAGE:
    444                         srv_damage(chandle, &call);
     444                        srv_damage(&call);
    445445                        break;
    446446
    447447                default:
    448                         async_answer_0(chandle, EINVAL);
     448                        async_answer_0(&call, EINVAL);
    449449                }
    450450        }
Note: See TracChangeset for help on using the changeset viewer.