From 4f03c775e587ca25bfc70817a0c30670abe336ef Mon Sep 17 00:00:00 2001 From: VilhoRaatikka Date: Mon, 16 Jun 2014 13:40:45 +0300 Subject: [PATCH] sescmd_cursor_reset didn't reset cursor's property pointer which made reset ineffective. --- server/core/config.c | 2 +- server/modules/include/readwritesplit.h | 4 ++-- .../modules/routing/readwritesplit/readwritesplit.c | 11 ++++++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/server/core/config.c b/server/core/config.c index 988e263fd..668cafdf4 100644 --- a/server/core/config.c +++ b/server/core/config.c @@ -469,7 +469,7 @@ int error_count = 0; s = strtok(NULL, ","); } } - if (filters) + if (filters && obj->element) { serviceSetFilters(obj->element, filters); } diff --git a/server/modules/include/readwritesplit.h b/server/modules/include/readwritesplit.h index e363aedad..b18bd5473 100644 --- a/server/modules/include/readwritesplit.h +++ b/server/modules/include/readwritesplit.h @@ -55,8 +55,8 @@ typedef struct rses_property_st rses_property_t; typedef struct router_client_session ROUTER_CLIENT_SES; typedef enum rses_property_type_t { - RSES_PROP_TYPE_UNDEFINED=0, - RSES_PROP_TYPE_SESCMD, + RSES_PROP_TYPE_UNDEFINED=-1, + RSES_PROP_TYPE_SESCMD=0, RSES_PROP_TYPE_FIRST = RSES_PROP_TYPE_SESCMD, RSES_PROP_TYPE_LAST=RSES_PROP_TYPE_SESCMD, RSES_PROP_TYPE_COUNT=RSES_PROP_TYPE_LAST+1 diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index 2d3b01a7e..fe63c455b 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -1640,6 +1640,8 @@ static bool select_connect_backend_servers( DCB_REASON_NOT_RESPONDING, &router_handle_state_switch, (void *)&backend_ref[i]); + bref_clear_state(&backend_ref[i], + BREF_CLOSED); bref_clear_state(&backend_ref[i], BREF_NOT_USED); bref_set_state(&backend_ref[i], @@ -2198,11 +2200,14 @@ static bool sescmd_cursor_history_empty( static void sescmd_cursor_reset( sescmd_cursor_t* scur) { + ROUTER_CLIENT_SES* rses; CHK_SESCMD_CUR(scur); CHK_CLIENT_RSES(scur->scmd_cur_rses); + rses = scur->scmd_cur_rses; + scur->scmd_cur_ptr_property = &rses->rses_properties[RSES_PROP_TYPE_SESCMD]; + CHK_RSES_PROP((*scur->scmd_cur_ptr_property)); - scur->scmd_cur_active = false; scur->scmd_cur_cmd = &(*scur->scmd_cur_ptr_property)->rses_prop_data.sescmd; } @@ -2688,6 +2693,8 @@ static void handleError ( return; } + bref = get_bref_from_dcb(rses, backend_dcb); + /** * Error handler is already called for this DCB because * it's not polling anymore. It can be assumed that @@ -2699,9 +2706,7 @@ static void handleError ( *succp = true; return; } - - bref = get_bref_from_dcb(rses, backend_dcb); CHK_BACKEND_REF(bref); if (BREF_IS_WAITING_RESULT(bref))