Changeset 4c6fd56 in mainline for uspace/srv/test/chardev-test/main.c


Ignore:
Timestamp:
2023-09-16T19:58:18Z (9 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7d7f5e3
Parents:
6a0b2cc
git-author:
Jiri Svoboda <jiri@…> (2023-09-16 19:48:07)
git-committer:
Jiri Svoboda <jiri@…> (2023-09-16 19:58:18)
Message:

loc_server_register() should be callable more than once (API only)

Now loc_server_register() returns a pointer to a loc_srv_t object,
that is then passed to loc_service_register() and
loc_service_add_to_cat().

Added loc_server_unregister() that unregisters the server
and frees the loc_srv_t object.

Updated all callers. The implementation, however, is a stub.
It is not actually possible to call loc_server_register() more
than once, yet.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/test/chardev-test/main.c

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2017 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    118118{
    119119        errno_t rc;
     120        loc_srv_t *srv;
    120121
    121122        printf("%s: Character device test service\n", NAME);
    122123        async_set_fallback_port_handler(chardev_test_connection, NULL);
    123124
    124         rc = loc_server_register(NAME);
     125        rc = loc_server_register(NAME, &srv);
    125126        if (rc != EOK) {
    126127                printf("%s: Failed registering server.: %s\n", NAME, str_error(rc));
     
    140141        partialx_srvs.sarg = NULL;
    141142
    142         rc = loc_service_register(SERVICE_NAME_CHARDEV_TEST_SMALLX, &smallx_svc_id);
     143        rc = loc_service_register(srv, SERVICE_NAME_CHARDEV_TEST_SMALLX,
     144            &smallx_svc_id);
    143145        if (rc != EOK) {
    144146                printf("%s: Failed registering service.: %s\n", NAME, str_error(rc));
    145                 return rc;
    146         }
    147 
    148         rc = loc_service_register(SERVICE_NAME_CHARDEV_TEST_LARGEX, &largex_svc_id);
     147                goto error;
     148        }
     149
     150        rc = loc_service_register(srv, SERVICE_NAME_CHARDEV_TEST_LARGEX,
     151            &largex_svc_id);
    149152        if (rc != EOK) {
    150153                printf("%s: Failed registering service.: %s\n", NAME, str_error(rc));
    151                 return rc;
    152         }
    153 
    154         rc = loc_service_register(SERVICE_NAME_CHARDEV_TEST_PARTIALX, &partialx_svc_id);
     154                goto error;
     155        }
     156
     157        rc = loc_service_register(srv, SERVICE_NAME_CHARDEV_TEST_PARTIALX,
     158            &partialx_svc_id);
    155159        if (rc != EOK) {
    156160                printf("%s: Failed registering service.: %s\n", NAME, str_error(rc));
    157                 return rc;
     161                goto error;
    158162        }
    159163
     
    164168        /* Not reached */
    165169        return 0;
     170error:
     171        if (smallx_svc_id != 0)
     172                loc_service_unregister(srv, smallx_svc_id);
     173        if (largex_svc_id != 0)
     174                loc_service_unregister(srv, largex_svc_id);
     175        if (partialx_svc_id != 0)
     176                loc_service_unregister(srv, partialx_svc_id);
     177        loc_server_unregister(srv);
     178        return rc;
    166179}
    167180
Note: See TracChangeset for help on using the changeset viewer.