Walk through the ready list
| 269 | // Walk through the ready list |
| 270 | // |
| 271 | void |
| 272 | NetHandler::process_ready_list() |
| 273 | { |
| 274 | NetEvent *ne = nullptr; |
| 275 | |
| 276 | #if defined(USE_EDGE_TRIGGER) |
| 277 | // NetEvent * |
| 278 | while ((ne = read_ready_list.dequeue())) { |
| 279 | // Initialize the thread-local continuation flags |
| 280 | set_cont_flags(ne->get_control_flags()); |
| 281 | if (ne->closed) { |
| 282 | free_netevent(ne); |
| 283 | } else if (ne->read.enabled && ne->read.triggered) { |
| 284 | ne->net_read_io(this); |
| 285 | } else if (!ne->read.enabled) { |
| 286 | read_ready_list.remove(ne); |
| 287 | } |
| 288 | } |
| 289 | while ((ne = write_ready_list.dequeue())) { |
| 290 | set_cont_flags(ne->get_control_flags()); |
| 291 | if (ne->closed) { |
| 292 | free_netevent(ne); |
| 293 | } else if (ne->write.enabled && ne->write.triggered) { |
| 294 | ne->net_write_io(this); |
| 295 | } else if (!ne->write.enabled) { |
| 296 | write_ready_list.remove(ne); |
| 297 | } |
| 298 | } |
| 299 | #else /* !USE_EDGE_TRIGGER */ |
| 300 | while ((ne = read_ready_list.dequeue())) { |
| 301 | set_cont_flags(ne->get_control_flags()); |
| 302 | if (ne->closed) |
| 303 | free_netevent(ne); |
| 304 | else if (ne->read.enabled && ne->read.triggered) |
| 305 | ne->net_read_io(this, this->thread); |
| 306 | else if (!ne->read.enabled) |
| 307 | ne->ep.modify(-EVENTIO_READ); |
| 308 | } |
| 309 | while ((ne = write_ready_list.dequeue())) { |
| 310 | set_cont_flags(ne->get_control_flags()); |
| 311 | if (ne->closed) |
| 312 | free_netevent(ne); |
| 313 | else if (ne->write.enabled && ne->write.triggered) |
| 314 | write_to_net(this, ne, this->thread); |
| 315 | else if (!ne->write.enabled) |
| 316 | ne->ep.modify(-EVENTIO_WRITE); |
| 317 | } |
| 318 | #endif /* !USE_EDGE_TRIGGER */ |
| 319 | } |
| 320 | |
| 321 | // |
| 322 | // The main event for NetHandler |
nothing calls this directly
no test coverage detected