projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix-uninit var in new non-blocking getaddrinfo bug
[yaz-moved-to-github.git]
/
src
/
tcpip.c
diff --git
a/src/tcpip.c
b/src/tcpip.c
index
72461c1
..
8df6a40
100644
(file)
--- a/
src/tcpip.c
+++ b/
src/tcpip.c
@@
-67,7
+67,9
@@
#include <yaz/tcpip.h>
#include <yaz/errno.h>
#include <yaz/tcpip.h>
#include <yaz/errno.h>
+#ifndef WIN32
#define RESOLVER_THREAD 1
#define RESOLVER_THREAD 1
+#endif
static void tcpip_close(COMSTACK h);
static int tcpip_put(COMSTACK h, char *buf, int size);
static void tcpip_close(COMSTACK h);
static int tcpip_put(COMSTACK h, char *buf, int size);
@@
-221,6
+223,7
@@
COMSTACK tcpip_type(int s, int flags, int protocol, void *vp)
sp->port = 0;
#endif
sp->ai = 0;
sp->port = 0;
#endif
sp->ai = 0;
+ sp->ai_connect = 0;
#endif
sp->altbuf = 0;
sp->altsize = sp->altlen = 0;
#endif
sp->altbuf = 0;
sp->altsize = sp->altlen = 0;
@@
-478,6
+481,7
@@
static struct addrinfo *wait_resolver_thread(COMSTACK h)
close(sp->pipefd[0]);
close(sp->pipefd[1]);
sp->pipefd[0] = -1;
close(sp->pipefd[0]);
close(sp->pipefd[1]);
sp->pipefd[0] = -1;
+ h->iofile = -1;
return create_net_socket(h);
}
return create_net_socket(h);
}
@@
-499,17
+503,20
@@
void *tcpip_straddr(COMSTACK h, const char *str)
port = "80";
}
#if RESOLVER_THREAD
port = "80";
}
#if RESOLVER_THREAD
- if (sp->pipefd[0] != -1)
- return 0;
- if (pipe(sp->pipefd) == -1)
- return 0;
+ if (h->flags & CS_FLAGS_DNS_NO_BLOCK)
+ {
+ if (sp->pipefd[0] != -1)
+ return 0;
+ if (pipe(sp->pipefd) == -1)
+ return 0;
- sp->port = port;
- xfree(sp->hoststr);
- sp->hoststr = xstrdup(str);
- sp->thread_id = yaz_thread_create(resolver_thread, h);
- return sp->hoststr;
-#else
+ sp->port = port;
+ xfree(sp->hoststr);
+ sp->hoststr = xstrdup(str);
+ sp->thread_id = yaz_thread_create(resolver_thread, h);
+ return sp->hoststr;
+ }
+#endif
if (sp->ai)
freeaddrinfo(sp->ai);
sp->ai = tcpip_getaddrinfo(str, port, &sp->ipv6_only);
if (sp->ai)
freeaddrinfo(sp->ai);
sp->ai = tcpip_getaddrinfo(str, port, &sp->ipv6_only);
@@
-518,7
+525,6
@@
void *tcpip_straddr(COMSTACK h, const char *str)
return create_net_socket(h);
}
return sp->ai;
return create_net_socket(h);
}
return sp->ai;
-#endif
}
#else
}
#else
@@
-676,9
+682,7
@@
int tcpip_connect(COMSTACK h, void *address)
*/
int tcpip_rcvconnect(COMSTACK h)
{
*/
int tcpip_rcvconnect(COMSTACK h)
{
-#if HAVE_GNUTLS_H
tcpip_state *sp = (tcpip_state *)h->cprivate;
tcpip_state *sp = (tcpip_state *)h->cprivate;
-#endif
TRC(fprintf(stderr, "tcpip_rcvconnect\n"));
if (h->state == CS_ST_DATAXFER)
TRC(fprintf(stderr, "tcpip_rcvconnect\n"));
if (h->state == CS_ST_DATAXFER)
@@
-941,6
+945,11
@@
COMSTACK tcpip_accept(COMSTACK h)
state->complete = st->complete;
#if HAVE_GETADDRINFO
state->ai = 0;
state->complete = st->complete;
#if HAVE_GETADDRINFO
state->ai = 0;
+#if RESOLVER_THREAD
+ state->hoststr = 0;
+ state->pipefd[0] = state->pipefd[1] = -1;
+ state->port = 0;
+#endif
#endif
cnew->state = CS_ST_ACCEPT;
h->state = CS_ST_IDLE;
#endif
cnew->state = CS_ST_ACCEPT;
h->state = CS_ST_IDLE;
@@
-1346,6
+1355,17
@@
void tcpip_close(COMSTACK h)
tcpip_state *sp = (struct tcpip_state *)h->cprivate;
TRC(fprintf(stderr, "tcpip_close: h=%p pid=%d\n", h, getpid()));
tcpip_state *sp = (struct tcpip_state *)h->cprivate;
TRC(fprintf(stderr, "tcpip_close: h=%p pid=%d\n", h, getpid()));
+#if HAVE_GETADDRINFO
+#if RESOLVER_THREAD
+ if (sp->pipefd[0] != -1)
+ {
+ yaz_thread_join(&sp->thread_id, 0);
+ close(sp->pipefd[0]);
+ close(sp->pipefd[1]);
+ h->iofile = -1;
+ }
+#endif
+#endif
if (h->iofile != -1)
{
#if HAVE_GNUTLS_H
if (h->iofile != -1)
{
#if HAVE_GNUTLS_H