diff options
| author | Werner Koch <[email protected]> | 2019-06-13 06:40:33 +0000 |
|---|---|---|
| committer | Werner Koch <[email protected]> | 2019-06-13 06:40:33 +0000 |
| commit | 28e620fa169dcbfc2301ae9bea58ebe3ccc3504a (patch) | |
| tree | 28be2b60116d54a3ba83f8297332bf56e5561728 /src/wait.h | |
| parent | core: Use fully correct command args for gpg --verify. (diff) | |
| download | gpgme-28e620fa169dcbfc2301ae9bea58ebe3ccc3504a.tar.gz gpgme-28e620fa169dcbfc2301ae9bea58ebe3ccc3504a.zip | |
core: Refactor the wait code utilizing the new fdtable.
* src/fdtable.c, src/fdtable.h: Largely extend.
* src/wait-global.c, src/wait-private.c, src/wait-user.c: Remove and
move code to ...
* src/wait.c: here.
(_gpgme_fd_table_init, fd_table_put): Remove. Do not call them.
(_gpgme_add_io_cb, _gpgme_add_io_cb_user): Change to use the fdtable.
(_gpgme_remove_io_cb, _gpgme_remove_io_cb_user): Ditto.
(_gpgme_wait_global_event_cb): Ditto.
(gpgme_wait_ext, _gpgme_wait_on_condition): Ditto.
* src/wait.h (struct io_cb_tag_s): Add fields 'serial' and 'desc'.
Change 'idx' to 'fd'.
(struct fd_table): Remove.
* src/context.h (struct gpgme_context): Remoce 'fdt'. Rename io_cbs
to user_io_cbs for clarity.
* src/engine-gpgsm.c: Unify trace output.
(start): Pass a description along with the IO handlers.
* src/priv-io.h (struct io_select_fd_s): Rename to io_select_s.
(io_select_t): New.
* src/gpgme.c (_gpgme_cancel_with_err): Replace arg 'ctx' by 'serial'.
(gpgme_cancel): Adjust.
--
This is the second part of a larger refactoring of the wait/event
code. Does currently only work on Unix and with the private wait
functions (i.e. the async operations don't yet work).
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src/wait.h')
| -rw-r--r-- | src/wait.h | 62 |
1 files changed, 25 insertions, 37 deletions
@@ -1,6 +1,6 @@ /* wait.h - Definitions for the wait queue interface. Copyright (C) 2000 Werner Koch (dd9jn) - Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH + Copyright (C) 2001, 2002, 2003, 2004. 2019 g10 Code GmbH This file is part of GPGME. @@ -25,58 +25,46 @@ #include "gpgme.h" #include "sema.h" -struct fd_table +/* A registered fd handler can be removed using the tag that + * identifies it. In the public API that tag is an an opaque + * pointer. */ +struct io_cb_tag_s { - struct io_select_fd_s *fds; - size_t size; -}; -typedef struct fd_table *fd_table_t; + /* The s/n of the context for which the fd was registered. */ + uint64_t serial; -/* Wait items are hooked into the io_select_fd_s to connect an fd with - a callback handler. */ -struct wait_item_s -{ - gpgme_ctx_t ctx; - gpgme_io_cb_t handler; - void *handler_value; - int dir; -}; - -/* A registered fd handler is removed later using the tag that - identifies it. */ -struct tag -{ - /* The context for which the fd was registered. */ - gpgme_ctx_t ctx; - - /* The index into the fd table for this context. */ - int idx; + /* The actual fd. */ + int fd; /* This is used by the wrappers for the user event loop. */ void *user_tag; -}; + /* A string used describing the data. This is used for tracing. */ + const char *desc; +}; -void _gpgme_fd_table_init (fd_table_t fdt); -void _gpgme_fd_table_deinit (fd_table_t fdt); gpgme_error_t _gpgme_add_io_cb (void *data, int fd, int dir, - gpgme_io_cb_t fnc, void *fnc_data, void **r_tag); + gpgme_io_cb_t fnc, void *fnc_data, + void **r_tag); +gpgme_error_t _gpgme_add_io_cb_user (void *data, int fd, int dir, + gpgme_io_cb_t fnc, void *fnc_data, + void **r_tag); + void _gpgme_remove_io_cb (void *tag); -void _gpgme_wait_private_event_cb (void *data, gpgme_event_io_t type, - void *type_data); +void _gpgme_remove_io_cb_user (void *tag); + + void _gpgme_wait_global_event_cb (void *data, gpgme_event_io_t type, void *type_data); -gpgme_error_t _gpgme_wait_user_add_io_cb (void *data, int fd, int dir, - gpgme_io_cb_t fnc, void *fnc_data, - void **r_tag); -void _gpgme_wait_user_remove_io_cb (void *tag); + +void _gpgme_wait_private_event_cb (void *data, gpgme_event_io_t type, + void *type_data); void _gpgme_wait_user_event_cb (void *data, gpgme_event_io_t type, void *type_data); -gpgme_error_t _gpgme_run_io_cb (struct io_select_fd_s *an_fds, int checked, - gpgme_error_t *err); + /* Session based interfaces require to make a distinction between IPC |
