| 167 | } |
| 168 | |
| 169 | void aio_stream::add_close_callback(aio_callback* callback) |
| 170 | { |
| 171 | acl_assert(callback); |
| 172 | |
| 173 | // copy on write |
| 174 | if (close_callbacks_ == NULL) { |
| 175 | close_callbacks_ = NEW std::list<AIO_CALLBACK*>; |
| 176 | } |
| 177 | |
| 178 | // �Ȳ�ѯ�ûص������Ѿ����� |
| 179 | std::list<AIO_CALLBACK*>::iterator it = close_callbacks_->begin(); |
| 180 | for (; it != close_callbacks_->end(); ++it) { |
| 181 | if ((*it)->callback == callback) { |
| 182 | if ((*it)->enable == false) { |
| 183 | (*it)->enable = true; |
| 184 | } |
| 185 | return; |
| 186 | } |
| 187 | } |
| 188 | |
| 189 | // ��һ����λ |
| 190 | it = close_callbacks_->begin(); |
| 191 | for (; it != close_callbacks_->end(); ++it) { |
| 192 | if ((*it)->callback == NULL) { |
| 193 | (*it)->enable = true; |
| 194 | (*it)->callback = callback; |
| 195 | return; |
| 196 | } |
| 197 | } |
| 198 | |
| 199 | // ����һ���µ�λ�� |
| 200 | AIO_CALLBACK* ac = (AIO_CALLBACK*) acl_mycalloc(1, sizeof(AIO_CALLBACK)); |
| 201 | ac->enable = true; |
| 202 | ac->callback = callback; |
| 203 | |
| 204 | // ���ӽ��ص���������� |
| 205 | close_callbacks_->push_back(ac); |
| 206 | } |
| 207 | |
| 208 | void aio_stream::add_timeout_callback(aio_callback* callback) |
| 209 | { |
no test coverage detected