| 23 | } |
| 24 | |
| 25 | void check_timer::timer_callback(unsigned int id) |
| 26 | { |
| 27 | id_ = (int) id; |
| 28 | |
| 29 | if (stopping_) { |
| 30 | logger("check_timer stopping ..."); |
| 31 | return; |
| 32 | } |
| 33 | |
| 34 | connect_manager& manager = monitor_.get_manager(); |
| 35 | |
| 36 | // �Զ���Ⲣ�رչ��ڿ��г����ӣ��Զ��ر��쳣���ӣ��Զ�����ÿ�����ӳص���С������ |
| 37 | manager.check_conns(monitor_.get_check_step(), |
| 38 | monitor_.check_idle_on(), monitor_.kick_dead_on(), |
| 39 | monitor_.keep_conns_on(), monitor_.get_threads(), NULL); |
| 40 | |
| 41 | if (!monitor_.check_server_on()) { |
| 42 | return; |
| 43 | } |
| 44 | |
| 45 | // ��ʼ�ռ���������˷�������ԣ����������÷����ַ����������� |
| 46 | |
| 47 | // ����ȡ���з�������ַ����ΪҪ�����Ķ����ڶ��̻߳����У� |
| 48 | // ������Ҫ���л��������� |
| 49 | manager.lock(); |
| 50 | |
| 51 | const std::vector<connect_pool*>& pools = manager.get_pools(); |
| 52 | |
| 53 | for (std::vector<connect_pool*>::const_iterator cit = pools.begin(); |
| 54 | cit != pools.end(); ++cit) { |
| 55 | |
| 56 | const char* addr = (*cit)->get_addr(); |
| 57 | if (addr == NULL || *addr == 0) { |
| 58 | logger_warn("addr null"); |
| 59 | continue; |
| 60 | } |
| 61 | |
| 62 | std::map<string, int>::iterator it = addrs_.find(addr); |
| 63 | if (it == addrs_.end()) { |
| 64 | addrs_[addr] = 1; |
| 65 | } else { |
| 66 | it->second++; |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | manager.unlock(); |
| 71 | |
| 72 | //if (addrs_.empty()) |
| 73 | // logger_warn(">>>no addr been set!<<<"); |
| 74 | |
| 75 | // �������з�������ַ |
| 76 | |
| 77 | struct timeval begin; |
| 78 | std::map<string, int>::iterator cit_next; |
| 79 | |
| 80 | for (std::map<string, int>::iterator cit = addrs_.begin(); |
| 81 | cit != addrs_.end(); cit = cit_next) { |
| 82 |
nothing calls this directly
no test coverage detected