My stupid idea was that I mentioned alternative API approaches like callbacks at the beginning of this thread. I did that before really thinking trough Bens usecase. I've meanwhile thought about Bens usecase a lot, and I realized that the API proposed is pretty perfect and that I've proposed as fodder for discussion a lot of stupid things. The elegance of Bens proposal is that the API is fine grained, convenient to wrap and doesn't impose a particular way to handle timer queries onto a users application code.I don't think that spinloops in themselves are an issue. We already have a working spinloop, it's called gl.finish.
Spinlooping without a synchronization command is an issue, because that can mutate to a deadspinloop. But this is relatively easy to safeguard against and throw an exception, which I'd consider a reasonable approach to migitate the issue and educate users on how not to use the API, without changing the API flavor.