aboutsummaryrefslogtreecommitdiffstats
path: root/src/wait.h
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-06-13 06:40:33 +0000
committerWerner Koch <[email protected]>2019-06-13 06:40:33 +0000
commit28e620fa169dcbfc2301ae9bea58ebe3ccc3504a (patch)
tree28be2b60116d54a3ba83f8297332bf56e5561728 /src/wait.h
parentcore: Use fully correct command args for gpg --verify. (diff)
downloadgpgme-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.h62
1 files changed, 25 insertions, 37 deletions
diff --git a/src/wait.h b/src/wait.h
index 4beac6e1..b7584cf5 100644
--- a/src/wait.h
+++ b/src/wait.h
@@ -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