void *easy_atomic_mthread_op_start(void *args) { easy_atomic_mt_op_args_t *p = (easy_atomic_mt_op_args_t *)args; int i; for(i = 0; i < p->loop_count; i++) { easy_atomic_add(&p->int64_add, 1); easy_atomic_add(&p->int64_sum, 1); } for(i = 0; i < p->loop_count; i++) { easy_atomic_add_return(&p->int64_add_return, 1); easy_atomic_add_return(&p->int64_sum, 1); } for(i = 0; i < p->loop_count; i++) { easy_atomic_inc(&p->int64_inc); easy_atomic_inc(&p->int64_sum); } for(i = 0; i < p->loop_count; i++) { easy_atomic_dec(&p->int64_dec); easy_atomic_dec(&p->int64_sum); } for(i = 0; i < p->loop_count; i++) { easy_atomic32_add(&p->int32_add, 1); easy_atomic32_add(&p->int32_sum, 1); } for(i = 0; i < p->loop_count; i++) { easy_atomic32_add_return(&p->int32_add_return, 1); easy_atomic32_add_return(&p->int32_sum, 1); } for(i = 0; i < p->loop_count; i++) { easy_atomic32_inc(&p->int32_inc); easy_atomic32_inc(&p->int32_sum); } for(i = 0; i < p->loop_count; i++) { easy_atomic32_dec(&p->int32_dec); easy_atomic32_dec(&p->int32_sum); } int j = 0; int t = 0; easy_atomic_t v; for(j = 0; j < p->loop_count; j++) { do { v = p->int64_set; t = easy_atomic_cmp_set(&p->int64_set, v, v + 1); } while(t == 0); easy_atomic_add(&p->int64_set_sum, t); } return (void *)NULL; }
int ObTbnetCallback::shadow_process(easy_request_t* r) { int ret = EASY_OK; if (NULL == r || NULL == r->ipacket) { TBSYS_LOG(ERROR, "request is empty, r = %p, r->ipacket = %p", r, r->ipacket); ret = EASY_BREAK; } else { ObShadowServer *server = (ObShadowServer*)r->ms->c->handler->user_data; ObPacket *req = (ObPacket*) r->ipacket; req->set_request(r); ret = server->handlePacket(req); if (OB_SUCCESS == ret) { r->ms->c->pool->ref++; easy_atomic_inc(&r->ms->pool->ref); easy_pool_set_lock(r->ms->pool); ret = EASY_AGAIN; } else { ret = EASY_OK; TBSYS_LOG(WARN, "can not push packet(src is %s, pcode is %u) to packet queue", inet_ntoa_r(r->ms->c->addr), req->get_packet_code()); } } return ret; }
TDHS_INLINE bool add_hash(uint64_t *hash) { if (filter && !bfilter_check(filter, hash)) { bfilter_add(filter, hash); easy_atomic_inc(&filter_num); return true; } return false; }
int ObProxyCallback::process(easy_request_t *r) { int ret = EASY_OK; if (NULL == r) { TBSYS_LOG(WARN, "request is NULL, r = %p", r); ret = EASY_BREAK; } else if (NULL == r->ipacket) { TBSYS_LOG(WARN, "request is NULL, r->ipacket = %p", r->ipacket); ret = EASY_BREAK; } else { ObProxyServer* server = (ObProxyServer*)r->ms->c->handler->user_data; ObPacket* packet = (ObPacket*)r->ipacket; packet->set_request(r); //handle_request will send response if (OB_REQUIRE_HEARTBEAT == packet->get_packet_code()) { server->handle_request(packet); ret = EASY_OK; } else { ret = server->handlePacket(packet); if (OB_SUCCESS == ret) { r->ms->c->pool->ref++; easy_atomic_inc(&r->ms->pool->ref); easy_pool_set_lock(r->ms->pool); ret = EASY_AGAIN; } else { ret = EASY_OK; TBSYS_LOG(WARN, "can not push packet(src is %s, pcode is %u) to packet queue", inet_ntoa_r(r->ms->c->addr), packet->get_packet_code()); } } } return ret; }
int ObUpdateCallback::process(easy_request_t* r) { int ret = EASY_OK; if (NULL == r) { TBSYS_LOG(ERROR, "request is empty, r = %p", r); ret = EASY_BREAK; } else if (NULL == r->ipacket) { TBSYS_LOG(ERROR, "request is empty, r->ipacket = %p", r->ipacket); ret = EASY_BREAK; } else { ObUpdateServer *server = reinterpret_cast<ObUpdateServer*>(r->ms->c->handler->user_data); ObPacket *req = reinterpret_cast<ObPacket*>(r->ipacket); req->set_request(r); r->ms->c->pool->ref ++; easy_atomic_inc(&r->ms->pool->ref); easy_pool_set_lock(r->ms->pool); ret = server->handlePacket(req); if (OB_SUCCESS == ret) { // enqueue success ret = EASY_AGAIN; } else if (OB_ENQUEUE_FAILED == ret) { TBSYS_LOG(WARN, "can not push packet(src is %s, pcode is %u) to packet queue", inet_ntoa_r(r->ms->c->addr), req->get_packet_code()); r->ms->c->pool->ref --; easy_atomic_dec(&r->ms->pool->ref); ret = EASY_OK; } else /* OB_ERROR */ { ret = EASY_AGAIN; } } return ret; }
int CMysqlCallback::process(easy_request_t* r) { cout<<"在CMysqlCallback的process函数中!"<<endl; int ret; easy_pool_set_lock(r->ms->pool); cout<<"----进入handle_packet_queue处理,然后返回CMysqlSPRPacket报文!----待补充"<<endl; CMysqlServer* server = reinterpret_cast<CMysqlServer*>(r->ms->c->handler->user_data); Args *ar=new Args(); ar->cserver=server; ar->r=r; // server->threadpool->Thread_Pool_add(&(server->do_com_query),ar); server->threadpool->add_task(&(server->do_com_query),ar); // -Yu cout<<"put the do_com_query into threadpool! "<<endl; r->ms->c->pool->ref++; easy_atomic_inc(&r->ms->pool->ref); ret=-11; cout<<"return!"<<endl; return ret; }