diff --git a/src/nameservice/WFServiceGovernance.cc b/src/nameservice/WFServiceGovernance.cc index d33eaade..5996e229 100644 --- a/src/nameservice/WFServiceGovernance.cc +++ b/src/nameservice/WFServiceGovernance.cc @@ -197,8 +197,17 @@ void WFServiceGovernance::success(RouteManager::RouteResult *result, WFNSTracing *tracing, CommTarget *target) { + EndpointAddress *server; + if (tracing->deleter) + { + auto *v = (std::vector *)(tracing->data); + server = (*v)[v->size() - 1]; + } + else + server = (EndpointAddress *)tracing->data; + pthread_rwlock_rdlock(&this->rwlock); - this->recover_server_from_breaker((EndpointAddress *)tracing->data); + this->recover_server_from_breaker(server); pthread_rwlock_unlock(&this->rwlock); WFDNSResolver::success(result, tracing, target); diff --git a/src/protocol/MySQLResult.inl b/src/protocol/MySQLResult.inl index 3226bb5e..f48c4a3a 100644 --- a/src/protocol/MySQLResult.inl +++ b/src/protocol/MySQLResult.inl @@ -174,7 +174,8 @@ inline int MySQLCell::as_int() const { if (!this->is_int()) return 0; - char num[MYSQL_NUM_STR_LENGTH + 1]; + + char num[MYSQL_INT_STR_LENGTH + 1]; memcpy(num, this->data, this->len); num[this->len] = '\0'; return atoi(num); @@ -222,7 +223,7 @@ inline unsigned long long MySQLCell::as_ulonglong() const if (!this->is_ulonglong()) return 0; - char num[MYSQL_NUM_STR_LENGTH + 1]; + char num[MYSQL_LONG_STR_LENGTH + 1]; memcpy(num, this->data, this->len); num[this->len] = '\0'; return strtoull(num, NULL, 10); diff --git a/src/protocol/mysql_types.h b/src/protocol/mysql_types.h index 48b5406d..ab6199f6 100644 --- a/src/protocol/mysql_types.h +++ b/src/protocol/mysql_types.h @@ -22,9 +22,10 @@ #define MYSQL_STATE_LENGTH 5 #define MYSQL_STATE_DEFAULT "HY000" -#define MYSQL_NUM_STR_LENGTH 8 // 8 Length-Encoded Integer -#define MYSQL_FLOAT_STR_LENGTH 7 // 7 for float -#define MYSQL_DOUBLE_STR_LENGTH 19 // 19 for long double +#define MYSQL_INT_STR_LENGTH 11 // 10 for unsigned int +#define MYSQL_LONG_STR_LENGTH 21 // 20 for unsigned long long +#define MYSQL_FLOAT_STR_LENGTH 7 // 7 for float +#define MYSQL_DOUBLE_STR_LENGTH 19 // 19 for long double // may be set by server in EOF/OK packet #define MYSQL_SERVER_MORE_RESULTS_EXIST 0x0008