This is the mail archive of the cygwin mailing list for the Cygwin project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Top-posting reformatted - cygwin.com/acronyms/#TOFU
The "efault.faulted()" two lines above your change is supposed to catch NULL dereferences.
Take a /look/ at the source for myfault::faulted in cygtls.h, it calls out to _cygtls::setup_fault, which calls _sjfault, which appears to be a q'n'd hacked-up version of setjmp in a context where it's going to get called back by an SEH handler. So IIUIC, calling 'efault.faulted' will catch any exception that happens from the point of the call until the point where the efault object goes out of scope and gets destructed and will cause execution to jump back to the if... clause.
Ah, got it--it behaves like exception handling, but it doesn't *look* like exception handling. Seems like a good place to add some comments! ;-) (Offer to submit a patch, but seeing as I had to ask, I doubt I'm the right person to do so.) Thanks for clearing this up for me!
The only logical place for such a comment would be at the source for myfault::faulted, as the idiom of efault.faulted() appears throughout cygwin.
One more thing to be aware of - the reason cygwin uses this (IMHO very slick) feature of C++ is that it is more efficient to assume that code will not fault, and blindly deference pointers with the minimal overhead of setting up the setjmp buffer with a pre-installed exception handler already prepared for this usage, than it is to use a syscall to Window's routines to validate every pointer before dereferencing it. On the exceptional case that the code actually did get passed a bad pointer, the overhead of the exception handling and longjmp are slower, but that is okay since it is the exception.
So maybe it looks weird. C++ is like that!
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |