doc: Fix minor errors in I/O callback example

* gpgme.texi (I/O Callback Example): Fix typos, add timeout to select,
and initialize mutex as recursive.

Signed-off-by: Daiki Ueno <ueno@gnu.org>
This commit is contained in:
Daiki Ueno 2016-02-09 17:03:50 +09:00 committed by Werner Koch
parent ae324b51ff
commit 0aaf1dedd6
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B

View File

@ -6016,6 +6016,7 @@ do_select (struct event_loop *loop)
fd_set wfds; fd_set wfds;
int i, n; int i, n;
int any = 0; int any = 0;
struct timeval tv;
struct one_fd *fdlist = loop->fds; struct one_fd *fdlist = loop->fds;
pthread_mutex_lock (&loop->lock); pthread_mutex_lock (&loop->lock);
@ -6024,11 +6025,14 @@ do_select (struct event_loop *loop)
for (i = 0; i < MAX_FDS; i++) for (i = 0; i < MAX_FDS; i++)
if (fdlist[i].fd != -1) if (fdlist[i].fd != -1)
FD_SET (fdlist[i].fd, fdlist[i].dir ? &rfds : &wfds); 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 do
@{ @{
n = select (FD_SETSIZE, &rfds, &wfds, NULL, 0); n = select (FD_SETSIZE, &rfds, &wfds, NULL, &tv);
@} @}
while (n < 0 && errno == EINTR); while (n < 0 && errno == EINTR);
@ -6082,6 +6086,7 @@ main (int argc, char *argv[])
gpgme_error_t err; gpgme_error_t err;
gpgme_data_t sig, text; gpgme_data_t sig, text;
int i; int i;
pthread_mutexattr_t attr;
struct gpgme_io_cbs io_cbs = struct gpgme_io_cbs io_cbs =
@{ @{
add_io_cb, add_io_cb,
@ -6091,12 +6096,19 @@ main (int argc, char *argv[])
&result &result
@}; @};
init_gpgme (void); init_gpgme ();
/* Initialize the loop structure. */ /* 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++) for (i = 0; i < MAX_FDS; i++)
loop->fds[i].fd = -1; loop.fds[i].fd = -1;
/* Initialize the result structure. */ /* Initialize the result structure. */
result.done = 0; result.done = 0;