diff options
Diffstat (limited to '')
| -rw-r--r-- | doc/gpgme.texi | 22 | 
1 files changed, 17 insertions, 5 deletions
| diff --git a/doc/gpgme.texi b/doc/gpgme.texi index ec7ebb77..6d6d692e 100644 --- a/doc/gpgme.texi +++ b/doc/gpgme.texi @@ -6016,6 +6016,7 @@ do_select (struct event_loop *loop)    fd_set wfds;    int i, n;    int any = 0; +  struct timeval tv;    struct one_fd *fdlist = loop->fds;    pthread_mutex_lock (&loop->lock); @@ -6024,11 +6025,14 @@ do_select (struct event_loop *loop)    for (i = 0; i < MAX_FDS; i++)      if (fdlist[i].fd != -1)        FD_SET (fdlist[i].fd, fdlist[i].dir ? &rfds : &wfds); -  pthread_mutex_unlock (&loop->unlock); +  pthread_mutex_unlock (&loop->lock); + +  tv.tv_sec = 0; +  tv.tv_usec = 1000;    do      @{ -      n = select (FD_SETSIZE, &rfds, &wfds, NULL, 0); +      n = select (FD_SETSIZE, &rfds, &wfds, NULL, &tv);      @}    while (n < 0 && errno == EINTR); @@ -6082,6 +6086,7 @@ main (int argc, char *argv[])    gpgme_error_t err;    gpgme_data_t sig, text;    int i; +  pthread_mutexattr_t attr;    struct gpgme_io_cbs io_cbs =    @{      add_io_cb, @@ -6091,12 +6096,19 @@ main (int argc, char *argv[])      &result    @}; -  init_gpgme (void); +  init_gpgme ();    /* Initialize the loop structure.  */ -  pthread_mutex_init (&loop.lock, NULL); + +  /* The mutex must be recursive, since remove_io_cb (which acquires a +     lock) can be called while holding a lock acquired in do_select.  */ +  pthread_mutexattr_init (&attr); +  pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); +  pthread_mutex_init (&loop.lock, &attr); +  pthread_mutexattr_destroy (&attr); +    for (i = 0; i < MAX_FDS; i++) -    loop->fds[i].fd = -1; +    loop.fds[i].fd = -1;    /* Initialize the result structure.  */    result.done = 0; | 
