#861 closed enhancement (fixed)
loc_xxx service registration should be compostitional
Reported by: | Jiri Svoboda | Owned by: | Jiri Svoboda |
---|---|---|---|
Priority: | major | Milestone: | 0.14.1 |
Component: | helenos/unspecified | Version: | mainline |
Keywords: | Cc: | ||
Blocker for: | Depends on: | ||
See also: |
Description
Currently to register one or more service with location services, one needs to call loc_server_register(server_name) exactly once,
then call loc_service_register(service_name) one or more times.
This makes it impossible for two, independent components in the same task to register services. For example, a library (libui, DDF, libc) cannot register services on its behalf without interfering with the main program or another library.
Note that this is just an API problem and fixing it should not require any fancy changes to IPC mechanisms.
Change History (4)
comment:2 by , 17 months ago
Owner: | set to |
---|---|
Status: | new → accepted |
comment:3 by , 17 months ago
Milestone: | → 0.13.1 |
---|---|
Resolution: | → fixed |
Status: | accepted → closed |
Fixed in changeset 7d7f5e3e22d4a07e37e90f73a61193fc2a664b39.
Note:
See TracTickets
for help on using tickets.
I realized that to get a fully compositional server one also needs the async registration to be compositional and need to make the connection between the client and the proper server component.
Currently it is not possible to create individual endpoints and register them with location service. The task as a whole is registered. With the current implementation of async ports, however, one can register multiple different interface types with handlers, independently. When the client is connecting, they specify the required interface type, which will enable the servers' async framework to route the request to the right server component.
This is not elegant and it requires that no two components must register the same interface type. The correct solution is to be able to create and register individual endpoints via location service, though.
It works as a stop-gap though. And if we make loc_server_register()/loc_service_register() compositional, we can make services at least somewhat compositional.
An example where this would work is libui() registering for color change notification and the main application being a virtual KVM registering virtual keyboard, video and mouse services (as they use different interface type from the one used by libui).