#include "config.h"
#include <stdio.h>
+#include <inttypes.h>
#include <limits.h>
#include <sys/uio.h>
#include <event.h>
/* global increasing counter, generating request id for UDP */
static volatile uint32_t udp_request_id= 0;
-extern __thread ms_thread_t ms_thread;
+extern pthread_key_t ms_thread_key;
/* generate upd request id */
static uint32_t ms_get_udp_request_id(void);
*/
static int ms_item_win_init(ms_conn_t *c)
{
+ ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
int exp_cnt= 0;
c->win_size= (int)ms_setting.win_size;
c->set_cursor= 0;
- c->exec_num= ms_thread.thread_ctx->exec_num_perconn;
+ c->exec_num= ms_thread->thread_ctx->exec_num_perconn;
c->remain_exec_num= c->exec_num;
c->item_win= (ms_task_item_t *)malloc(
*/
static int ms_conn_sock_init(ms_conn_t *c)
{
+ ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
int i;
int ret_sfd;
int srv_idx= 0;
else
{
/* all the connections in a thread connects the same server */
- srv_idx= ms_thread.thread_ctx->srv_idx;
+ srv_idx= ms_thread->thread_ctx->srv_idx;
}
if (ms_network_connect(c, ms_setting.servers[srv_idx].srv_host_name,
*/
static int ms_conn_event_init(ms_conn_t *c)
{
+ ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
/* default event timeout 10 seconds */
struct timeval t=
{
short event_flags= EV_WRITE | EV_PERSIST;
event_set(&c->event, c->sfd, event_flags, ms_event_handler, (void *)c);
- event_base_set(ms_thread.base, &c->event);
+ event_base_set(ms_thread->base, &c->event);
c->ev_flags= event_flags;
if (c->total_sfds == 1)
*/
void ms_conn_free(ms_conn_t *c)
{
+ ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
if (c != NULL)
{
if (c->hdrbuf != NULL)
if (c->tcpsfd != NULL)
free(c->tcpsfd);
- if (--ms_thread.nactive_conn == 0)
+ if (--ms_thread->nactive_conn == 0)
{
- free(ms_thread.conn);
+ free(ms_thread->conn);
}
}
} /* ms_conn_free */
*/
static void ms_conn_close(ms_conn_t *c)
{
+ ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
assert(c != NULL);
/* delete the event, the socket and the connection */
pthread_mutex_unlock(&ms_global.run_lock.lock);
}
- if (ms_thread.nactive_conn == 0)
+ if (ms_thread->nactive_conn == 0)
{
pthread_exit(NULL);
}
*/
static int ms_reconn(ms_conn_t *c)
{
+ ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
int srv_idx= 0;
int32_t srv_conn_cnt= 0;
}
else
{
- srv_idx= ms_thread.thread_ctx->srv_idx;
+ srv_idx= ms_thread->thread_ctx->srv_idx;
srv_conn_cnt= ms_setting.nconns / ms_setting.srv_cnt;
}
close(c->sfd);
c->tcpsfd[c->cur_idx]= 0;
- if (atomic_add_32_nv((volatile uint32_t *)&ms_setting.servers[srv_idx].disconn_cnt, 1)
- % srv_conn_cnt == 0)
+ if (atomic_add_32_nv(&ms_setting.servers[srv_idx].disconn_cnt, 1)
+ % (uint32_t)srv_conn_cnt == 0)
{
gettimeofday(&ms_setting.servers[srv_idx].disconn_time, NULL);
fprintf(stderr, "Server %s:%d disconnect\n",
ms_setting.udp, &c->sfd) == 0)
{
c->tcpsfd[c->cur_idx]= c->sfd;
- if (atomic_add_32_nv((volatile uint32_t *)(&ms_setting.servers[srv_idx].reconn_cnt), 1)
- % srv_conn_cnt == 0)
+ if (atomic_add_32_nv(&ms_setting.servers[srv_idx].reconn_cnt, 1)
+ % (uint32_t)srv_conn_cnt == 0)
{
gettimeofday(&ms_setting.servers[srv_idx].reconn_time, NULL);
int reconn_time=
*/
int ms_reconn_socks(ms_conn_t *c)
{
+ ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
int srv_idx= 0;
int ret_sfd= 0;
int srv_conn_cnt= 0;
}
else
{
- srv_idx= ms_thread.thread_ctx->srv_idx;
+ srv_idx= ms_thread->thread_ctx->srv_idx;
srv_conn_cnt= ms_setting.nconns / ms_setting.srv_cnt;
}
c->tcpsfd[i]= ret_sfd;
c->alive_sfds++;
- if (atomic_add_32_nv((volatile uint32_t *)(&ms_setting.servers[srv_idx].reconn_cnt), 1)
- % srv_conn_cnt == 0)
+ if (atomic_add_32_nv(&ms_setting.servers[srv_idx].reconn_cnt, 1)
+ % (uint32_t)srv_conn_cnt == 0)
{
gettimeofday(&ms_setting.servers[srv_idx].reconn_time, NULL);
int reconn_time=
"\n<%d expire time verification failed, "
"object expired but get it now\n"
"\tkey len: %d\n"
- "\tkey: %lx %.*s\n"
+ "\tkey: %" PRIx64 " %.*s\n"
"\tset time: %s current time: %s "
"diff time: %d expire time: %d\n"
"\texpected data: \n"
fprintf(stderr,
"\n<%d data verification failed\n"
"\tkey len: %d\n"
- "\tkey: %lx %.*s\n"
+ "\tkey: %" PRIx64" %.*s\n"
"\texpected data len: %d\n"
"\texpected data: %.*s\n"
"\treceived data len: %d\n"
*/
static bool ms_need_yield(ms_conn_t *c)
{
+ ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key);
int64_t tps= 0;
int64_t time_diff= 0;
struct timeval curr_time;
if (ms_setting.expected_tps > 0)
{
gettimeofday(&curr_time, NULL);
- time_diff= ms_time_diff(&ms_thread.startup_time, &curr_time);
+ time_diff= ms_time_diff(&ms_thread->startup_time, &curr_time);
tps=
(int64_t)((task->get_opt
+ task->set_opt) / ((uint64_t)time_diff / 1000000));
/* current throughput is greater than expected throughput */
- if (tps > ms_thread.thread_ctx->tps_perconn)
+ if (tps > ms_thread->thread_ctx->tps_perconn)
{
return true;
}