X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fms_thread.c;h=1efe5cfbb6f62df9dc8975033065d6ae933db002;hb=cbda284a1c119a467135113b3a85ced915e869aa;hp=048593d6d0ad26ab3d640e567c069b64d5387625;hpb=3928e14fbe1ed17cefe9bdbbb282fb7ecf053e7a;p=m6w6%2Flibmemcached diff --git a/clients/ms_thread.c b/clients/ms_thread.c index 048593d6..1efe5cfb 100644 --- a/clients/ms_thread.c +++ b/clients/ms_thread.c @@ -35,7 +35,7 @@ static ms_thread_ctx_t *ms_thread_ctx; static void ms_set_current_time(void); static void ms_check_sock_timeout(void); static void ms_clock_handler(const int fd, const short which, void *arg); -static int ms_set_thread_cpu_affinity(int cpu); +static uint32_t ms_set_thread_cpu_affinity(uint32_t cpu); static int ms_setup_thread(ms_thread_ctx_t *thread_ctx); static void *ms_worker_libevent(void *arg); static void ms_create_worker(void *(*func)(void *), void *arg); @@ -65,7 +65,7 @@ static void ms_check_sock_timeout(void) ms_conn_t *c= NULL; int time_diff= 0; - for (int i= 0; i < ms_thread->thread_ctx->nconns; i++) + for (uint32_t i= 0; i < ms_thread->thread_ctx->nconns; i++) { c= &ms_thread->conn[i]; @@ -94,7 +94,7 @@ static void ms_check_sock_timeout(void) static void ms_reconn_thread_socks(void) { ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key); - for (int i= 0; i < ms_thread->thread_ctx->nconns; i++) + for (uint32_t i= 0; i < ms_thread->thread_ctx->nconns; i++) { ms_reconn_socks(&ms_thread->conn[i]); } @@ -146,11 +146,11 @@ static void ms_clock_handler(const int fd, const short which, void *arg) * * @param cpu, cpu index * - * @return if success, return 0, else return -1 + * @return if success, return EXIT_SUCCESS, else return -1 */ -static int ms_set_thread_cpu_affinity(int cpu) +static uint32_t ms_set_thread_cpu_affinity(uint32_t cpu) { - int ret= 0; + uint32_t ret= 0; #ifdef HAVE_CPU_SET_T cpu_set_t cpu_set; @@ -175,7 +175,7 @@ static int ms_set_thread_cpu_affinity(int cpu) * * @param thread_ctx, pointer of the thread context structure * - * @return if success, return 0, else return -1 + * @return if success, return EXIT_SUCCESS, else return -1 */ static int ms_setup_thread(ms_thread_ctx_t *thread_ctx) { @@ -216,7 +216,7 @@ static int ms_setup_thread(ms_thread_ctx_t *thread_ctx) } memset(ms_thread->conn, 0, (size_t)thread_ctx->nconns * sizeof(ms_conn_t)); - for (int i= 0; i < thread_ctx->nconns; i++) + for (uint32_t i= 0; i < thread_ctx->nconns; i++) { ms_thread->conn[i].conn_idx= i; if (ms_setup_conn(&ms_thread->conn[i]) != 0) @@ -231,7 +231,7 @@ static int ms_setup_thread(ms_thread_ctx_t *thread_ctx) } } - return 0; + return EXIT_SUCCESS; } /* ms_setup_thread */ @@ -244,7 +244,7 @@ static int ms_setup_thread(ms_thread_ctx_t *thread_ctx) */ static void *ms_worker_libevent(void *arg) { - ms_thread_t *ms_thread= pthread_getspecific(ms_thread_key); + ms_thread_t *ms_thread= NULL; ms_thread_ctx_t *thread_ctx= (ms_thread_ctx_t *)arg; /** @@ -264,6 +264,12 @@ static void *ms_worker_libevent(void *arg) /* each thread with a timer */ ms_clock_handler(0, 0, 0); + pthread_mutex_lock(&ms_global.init_lock.lock); + ms_global.init_lock.count++; + pthread_cond_signal(&ms_global.init_lock.cond); + pthread_mutex_unlock(&ms_global.init_lock.lock); + + ms_thread= pthread_getspecific(ms_thread_key); event_base_loop(ms_thread->base, 0); return NULL; @@ -304,7 +310,7 @@ void ms_thread_init() exit(1); } - for (int i= 0; i < ms_setting.nthreads; i++) + for (uint32_t i= 0; i < ms_setting.nthreads; i++) { ms_thread_ctx[i].thd_idx= i; ms_thread_ctx[i].nconns= ms_setting.nconns / ms_setting.nthreads; @@ -316,7 +322,7 @@ void ms_thread_init() */ ms_thread_ctx[i].srv_idx= i % ms_setting.srv_cnt; ms_thread_ctx[i].tps_perconn= ms_setting.expected_tps - / ms_setting.nconns; + / (int)ms_setting.nconns; ms_thread_ctx[i].exec_num_perconn= ms_setting.exec_num / ms_setting.nconns; } @@ -327,7 +333,7 @@ void ms_thread_init() exit(1); } /* Create threads after we've done all the epoll setup. */ - for (int i= 0; i < ms_setting.nthreads; i++) + for (uint32_t i= 0; i < ms_setting.nthreads; i++) { ms_create_worker(ms_worker_libevent, (void *)&ms_thread_ctx[i]); }