There's a race condition here. Another thread could insert its own adapter into the table before this, causing it to be lost forever.

It might be simpler to use `@synchronized` here. I'm generally skeptical of GCD queues used as a synchronizing primitive, because they have more corner cases to be aware of.