On Mon, May 29, 2023 at 12:04 PM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > On Mon, May 29, 2023 at 8:09 AM Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > > > On Sat, May 27, 2023 at 9:18 PM Linus Torvalds > > <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > > It's also an example of something people need to be aware of: the > > > auto-releasing is not ordered. That may or may not be a problem. It's > > > not a problem for two identical locks, but it very much *can* be a > > > problem if you mix different locks. > > > > It is guaranteed. It would be nice to have it documented, but if you > > look at the intermediate representation of this simple example: > > Well, I can see that it might be doing that reverse ordering in > practice, but for the life of me, I can't actually find anything that > says it is guaranteed. > > Google did find me one blog post by Ian Lance Taylor from 2008 that > said that yes, each __cleanup__ attribute basically creates its own > little scope, and that the cleanup in reverse declaration order is > thus guaranteed. > > Let's add Ian to the cc, partly to confirm it wasn't just a random > implementation detail, but also partly to perhaps ask him to get > somebody to document it. > > Because if it's not documented, how do we know that the clang > implementation of that attribute then ends up also guaranteeing the > reverse order cleanup, even if gcc might guarantee it? > > I *suspect* - but cannot find any guarantees - that it's going to > match C++ destructors, and you probably end up pretty much always > having to deal with these cleanup functions in reverse order, so it > all sounds very likely to me. > > And maybe it's even documented somewhere that neither of us could find. > > Anyway, I do like the option to use cleanup functions, but I think > we'd better make sure, since we really may require nesting for locks > (even if in many cases it won't matter). > > Ian? Any chance you can either point us at documentation, or maybe > just confirm it, and hopefully make said documentation happen? It was a while ago, but I expect that I was just thinking of the implementation. I agree that the documentation could be clearer. I filed https://gcc.gnu.org/PR110029. Ian