How about setting the internal serial queue as the target queue of the caller supplied queue? It would prevent the above noted concurrent execution. Of course, then you need a note documenting that a supplied concurrent queue will effectively become serial.