| 403 | } |
| 404 | |
| 405 | void event::remove_event_handler(const handler& handler_) { |
| 406 | int cas_zero = 0; |
| 407 | while(!handlers_lock.compare_exchange_strong(cas_zero, handlers_locked)) { |
| 408 | this_thread::yield(); |
| 409 | } |
| 410 | |
| 411 | for(auto handler_iter = handlers.cbegin(); handler_iter != handlers.cend(); ) { |
| 412 | // good old pointer comparison ... |
| 413 | if(&handler_iter->second == &handler_) { |
| 414 | handler_iter = handlers.erase(handler_iter); |
| 415 | } |
| 416 | else ++handler_iter; |
| 417 | } |
| 418 | for(auto handler_iter = internal_handlers.cbegin(); handler_iter != internal_handlers.cend(); ) { |
| 419 | if(&handler_iter->second == &handler_) { |
| 420 | handler_iter = internal_handlers.erase(handler_iter); |
| 421 | } |
| 422 | else ++handler_iter; |
| 423 | } |
| 424 | |
| 425 | handlers_lock = 0; |
| 426 | } |
| 427 | |
| 428 | void event::remove_event_types_from_handler(const handler& handler_, const set<EVENT_TYPE>& types) { |
| 429 | int cas_zero = 0; |
no test coverage detected