inline void add(key_t key, const add_t &val, val_t *oval = 0) { while(true) { while(atomic::cas(&status, FREE, INUSE) != FREE) my_hash->wait_event_is_done(); if(ary->add(key, val, oval)) break; // Improve this. Undefined behavior if dump_to_file throws an error. if(my_hash->get_event_locks()) { my_hash->dump(); my_hash->release_event_locks(); } } if(atomic::cas(&status, INUSE, FREE) != INUSE) my_hash->signal_not_in_use(); }