From 462bfe677b3d13587f0315b184d3f41de1673c68 Mon Sep 17 00:00:00 2001 From: counterpoint Date: Fri, 22 May 2015 11:17:17 +0100 Subject: [PATCH] Fix some bugs; add info for maxadmin. --- server/core/dcb.c | 6 ++++++ server/core/server.c | 12 +++++++----- server/include/server.h | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index 78b90e7a0..407adaf81 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -637,6 +637,9 @@ char *user; user = session_getUser(session); if (NULL != user && strlen(user)) { + LOGIF(LD, (skygw_log_write( + LOGFILE_DEBUG, + "About to attempt to get a persistent connection DCB"))); dcb = server_get_persistent(server, user); if (NULL != dcb) { @@ -1282,12 +1285,15 @@ dcb_close(DCB *dcb) if (rc == 0) { + if (NULL != dcb->server) + { spinlock_acquire(&dcb->server->persistlock); dcb->nextpersistent = dcb->server->persistent; dcb->server->persistent = dcb; spinlock_release(&dcb->server->persistlock); atomic_add(&dcb->server->stats.n_persistent, 1); return; + } /** * close protocol and router session diff --git a/server/core/server.c b/server/core/server.c index 1d57c4a3f..e079badd6 100644 --- a/server/core/server.c +++ b/server/core/server.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -79,7 +80,7 @@ SERVER *server; server->master_id = -1; server->depth = -1; server->persistent = NULL; - spinlock_init(server->persistlock); + spinlock_init(&server->persistlock); spinlock_acquire(&server_spin); server->next = allServers; @@ -142,12 +143,12 @@ server_get_persistent(SERVER *server, char *user) DCB *dcb, *previous; int rc; - spinlock_acquire(server->persistlock); + spinlock_acquire(&server->persistlock); dcb = server->persistent; previous = NULL; while (dcb) { /* Test for expired, free and remove from list if it is */ - if (0 == strcmp(dcb->user, user)) + if (NULL != dcb->user && 0 == strcmp(dcb->user, user)) { if (NULL == previous) { @@ -164,7 +165,7 @@ server_get_persistent(SERVER *server, char *user) } else { - spinlock_release(server->persistlock); + spinlock_release(&server->persistlock); atomic_add(&server->stats.n_persistent, -1); return dcb; } @@ -176,7 +177,7 @@ server_get_persistent(SERVER *server, char *user) { /* Change user, remove DCB from list, release spinlock, return dcb */ } - spinlock_release(server->persistlock); + spinlock_release(&server->persistlock); return NULL; } @@ -255,6 +256,7 @@ printServer(SERVER *server) printf("\tPort: %d\n", server->port); printf("\tTotal connections: %d\n", server->stats.n_connections); printf("\tCurrent connections: %d\n", server->stats.n_current); + printf("\tPersistent connections: %d\n", server->stats.n_persistent); } /** diff --git a/server/include/server.h b/server/include/server.h index f6ae66902..399a2536e 100644 --- a/server/include/server.h +++ b/server/include/server.h @@ -96,7 +96,7 @@ typedef struct server { long *slaves; /**< Slaves of this node */ bool master_err_is_logged; /*< If node failed, this indicates whether it is logged */ DCB *persistent; /**< List of unused persistent connections to the server */ - SPINLOCK *persistlock; /**< Lock for adjusting the persistent connections list */ + SPINLOCK persistlock; /**< Lock for adjusting the persistent connections list */ } SERVER; /**