07.02.2015 13:27, Alex Peshkoff wrote: > > I do not see too big trouble with full checks of string args. But what > about keeping legacy dup check present in ERR_post()? Taking into an > account that string once made permanent will remain the same per thread > suppose it will be enough for most cases.
What if the same exception will be made permanent twice, at different places? String pointers will be different, but their contents the same. And even the easy check costs us a performance penalty as stuff_exception() is often called 3-5 times during the stack unwinding. This wasn't the case with ERR_post(). That said, stack unwinding is not a performance critical part, so maybe we can live with that. But see below. > Completely removing tdbb_status_vector will break warnings delivery. OK, I can live with tdbb_status_vector used exclusively for the warnings. > I think that merging errors in stuffException() is both simpler and more > efficient. Merging errors into tdbb_status_vector is not enough. It leads tdbb_status_vector to keep {A, B}, but only either A or B will be thrown. This is not how ERR_*() routines work, as they always throw the whole tdbb_status_vector. Also, JRD's transliterateException() completely ignores tdbb_status_vector and returns only the catched exception. Ideally, stuff_exception() should also reset the exception object with the merged vector to ensure that the active exception is in sync with tdbb_status_vector. It's doable if ex is status_exception but e.g. BadAlloc has no status vector inside. Finally, it opens gates for undesired items to unexpectedly appear inside the status vector (current behavior or stuff_exception() hides that). This is not bad per se, as it allows us to find and fix such cases. But I'd rather avoid such side effects at the Beta stage. Dmitry ------------------------------------------------------------------------------ Dive into the World of Parallel Programming. The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel