4 ms·
And that's the perfect usage for goto. Error catching and jump to fail block...
by crankylinuxuser 7y ago
And that's the perfect usage for goto. Error catching and jump to fail block...
- johannes1234321 7y agoGoto requires the fail block to be in the same frame. It can be a working error strategy for failing critical errors in such a way from a failing module. You have to be aware that lots of stuff is prone to leak (which can be avoided by i.e. using some memory arena) and locks/mutexes/... might be in unclear state, so code has to be aware of that.
- userbinator 7y agoThe destination of the goto is usually the clean-up code.
- johannes1234321 7y agoThat's nice for the single frame. Let's take the example of PostgreSQL, which was mentioned in this thread: A potential implementation (I have no knowledge of pgsql internals) might be that for a single user session all memory is from a single arena, all locks and other handles are tied to the session handle, then it can be an efficient strategy to longjmp out on a critical error (i.e. IO error) and clean the arena as well as things tied to the session. instead of bubbling this up through all frames.
- Mikhail_Edoshin 7y agoIt's a different use case. There was a nice article[1] about exceptions in plain C with setjmp and longjmp. [1] http://www.on-time.com/ddj0011.htm http://www.on-time.com/ddj0011.htm