projects
/
pazpar2-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
YLOG_DEBUG for stmt in client_incref
[pazpar2-moved-to-github.git]
/
src
/
connection.c
diff --git
a/src/connection.c
b/src/connection.c
index
f9b0e0b
..
1525dfb
100644
(file)
--- a/
src/connection.c
+++ b/
src/connection.c
@@
-117,11
+117,12
@@
void connection_destroy(struct connection *co)
}
yaz_log(YLOG_DEBUG, "Connection destroy %s", co->host->hostport);
}
yaz_log(YLOG_DEBUG, "Connection destroy %s", co->host->hostport);
- remove_connection_from_host(co);
if (co->client)
{
client_disconnect(co->client);
}
if (co->client)
{
client_disconnect(co->client);
}
+
+ remove_connection_from_host(co);
xfree(co->zproxy);
xfree(co);
}
xfree(co->zproxy);
xfree(co);
}
@@
-158,16
+159,21
@@
static struct connection *connection_create(struct client *cl,
static void non_block_events(struct connection *co)
{
static void non_block_events(struct connection *co)
{
- struct client *cl = co->client;
+ int got_records = 0;
IOCHAN iochan = co->iochan;
ZOOM_connection link = co->link;
while (1)
{
IOCHAN iochan = co->iochan;
ZOOM_connection link = co->link;
while (1)
{
+ struct client *cl = co->client;
int ev;
int r = ZOOM_event_nonblock(1, &link);
if (!r)
break;
int ev;
int r = ZOOM_event_nonblock(1, &link);
if (!r)
break;
+ if (!cl)
+ continue;
ev = ZOOM_connection_last_event(link);
ev = ZOOM_connection_last_event(link);
+
+ client_incref(cl);
#if 0
yaz_log(YLOG_LOG, "ZOOM_EVENT_%s", ZOOM_get_event_str(ev));
#endif
#if 0
yaz_log(YLOG_LOG, "ZOOM_EVENT_%s", ZOOM_get_event_str(ev));
#endif
@@
-208,11
+214,23
@@
static void non_block_events(struct connection *co)
break;
case ZOOM_EVENT_RECV_RECORD:
client_record_response(cl);
break;
case ZOOM_EVENT_RECV_RECORD:
client_record_response(cl);
+ got_records = 1;
break;
default:
yaz_log(YLOG_LOG, "Unhandled event (%d) from %s",
ev, client_get_url(cl));
}
break;
default:
yaz_log(YLOG_LOG, "Unhandled event (%d) from %s",
ev, client_get_url(cl));
}
+ client_destroy(cl);
+ }
+ if (got_records)
+ {
+ struct client *cl = co->client;
+ if (cl)
+ {
+ client_incref(cl);
+ client_got_records(cl);
+ client_destroy(cl);
+ }
}
}
}
}
@@
-225,16
+243,15
@@
static void connection_handler(IOCHAN iochan, int event)
{
struct connection *co = iochan_getdata(iochan);
struct client *cl = co->client;
{
struct connection *co = iochan_getdata(iochan);
struct client *cl = co->client;
- struct session *se = 0;
- if (cl)
- se = client_get_session(cl);
- else
+ if (!cl)
{
{
+ /* no client associated with it.. We are probably getting
+ a closed connection from the target.. Or, perhaps, an unexpected
+ package.. We will just close the connection */
connection_destroy(co);
return;
}
connection_destroy(co);
return;
}
-
if (event & EVENT_TIMEOUT)
{
if (co->state == Conn_Connecting)
if (event & EVENT_TIMEOUT)
{
if (co->state == Conn_Connecting)
@@
-422,7
+439,6
@@
int client_prep_connection(struct client *cl,
iochan_man_t iochan_man)
{
struct connection *co;
iochan_man_t iochan_man)
{
struct connection *co;
- struct session *se = client_get_session(cl);
struct host *host = client_get_host(cl);
struct session_database *sdb = client_get_database(cl);
const char *zproxy = session_setting_oneval(sdb, PZ_ZPROXY);
struct host *host = client_get_host(cl);
struct session_database *sdb = client_get_database(cl);
const char *zproxy = session_setting_oneval(sdb, PZ_ZPROXY);