aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2002-06-14 20:06:35 +0000
committerMarcus Brinkmann <[email protected]>2002-06-14 20:06:35 +0000
commitccde48c08d118182c5760d7f4c02e157b28420cc (patch)
tree3f3ae58b38ee0fa5a1dc37655c687ccd44a3ad72
parentCosmetic fix. (diff)
downloadgpgme-ccde48c08d118182c5760d7f4c02e157b28420cc.tar.gz
gpgme-ccde48c08d118182c5760d7f4c02e157b28420cc.zip
2002-06-14 Marcus Brinkmann <[email protected]>
* wait.c (do_select): Return -1 on error, and 0 if nothing to run. (_gpgme_wait_one): Only set HANG to zero if do_select returned an error, or there are no more file descriptors to wait on. (_gpgme_wait_on_condition): Ignore return value from do_select for now.
Diffstat (limited to '')
-rw-r--r--gpgme/ChangeLog8
-rw-r--r--gpgme/wait.c42
2 files changed, 40 insertions, 10 deletions
diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog
index 44bcc310..c017b081 100644
--- a/gpgme/ChangeLog
+++ b/gpgme/ChangeLog
@@ -1,3 +1,11 @@
+2002-06-14 Marcus Brinkmann <[email protected]>
+
+ * wait.c (do_select): Return -1 on error, and 0 if nothing to run.
+ (_gpgme_wait_one): Only set HANG to zero if do_select returned an
+ error, or there are no more file descriptors to wait on.
+ (_gpgme_wait_on_condition): Ignore return value from do_select for
+ now.
+
2002-06-13 Werner Koch <[email protected]>
* verify.c (gpgme_op_verify): Make sure that we never access an
diff --git a/gpgme/wait.c b/gpgme/wait.c
index 9f849fdf..6c99d3e3 100644
--- a/gpgme/wait.c
+++ b/gpgme/wait.c
@@ -143,8 +143,8 @@ run_idle ()
/* Wait on all file descriptors listed in FDT and process them using
- the registered callbacks. Returns 0 if nothing to run and 1 if it
- did run something. */
+ the registered callbacks. Returns -1 on error (with errno set), 0
+ if nothing to run and 1 if it did run something. */
static int
do_select (fd_table_t fdt)
{
@@ -157,7 +157,7 @@ do_select (fd_table_t fdt)
if (n <= 0)
{
UNLOCK (fdt->lock);
- return 0; /* Error or timeout. */
+ return n; /* Error or timeout. */
}
for (i = 0; i < fdt->size && n; i++)
@@ -236,22 +236,44 @@ gpgme_wait (GpgmeCtx ctx, GpgmeError *status, int hang)
GpgmeError
_gpgme_wait_one (GpgmeCtx ctx)
{
+ GpgmeError err = 0;
int hang = 1;
DEBUG1 ("waiting... ctx=%p", ctx);
do
{
- if (! do_select (&ctx->fdt))
- hang = 0;
+ if (do_select (&ctx->fdt) < 0)
+ {
+ err = mk_error (File_Error);
+ hang = 0;
+ }
+ else
+ {
+ int any = 0;
+ int i;
+
+ LOCK (ctx->fdt.lock);
+ for (i = 0; i < ctx->fdt.size; i++)
+ {
+ if (ctx->fdt.fds[i].fd != -1)
+ {
+ any = 1;
+ break;
+ }
+ }
+ if (!any)
+ hang = 0;
+ UNLOCK (ctx->fdt.lock);
+ }
}
while (hang && !ctx->cancel);
- if (ctx->cancel)
+ if (!err && ctx->cancel)
{
/* FIXME: Paranoia? */
ctx->cancel = 0;
ctx->pending = 0;
ctx->error = mk_error (Canceled);
}
- return ctx->error;
+ return err ? err : ctx->error;
}
@@ -261,9 +283,9 @@ _gpgme_wait_on_condition (GpgmeCtx ctx, int hang, volatile int *cond)
DEBUG3 ("waiting... ctx=%p hang=%d cond=%p", ctx, hang, cond);
do
{
- if (! do_select (&fdt_global))
- hang = 0;
-
+ /* XXX We are ignoring all errors from select here. */
+ do_select (&fdt_global);
+
if (cond && *cond)
hang = 0;
else