Dear Alexey, I am attaching another iteration of the patch as suggested. The exception-free method is used internally for a better protection. Best wishes, Vladimir -- Vladimir V. Kisil http://www.maths.leeds.ac.uk/~kisilv/ Book: Geometry of Mobius Transformations http://goo.gl/EaG2Vu Software: Geometry of cycles http://moebinv.sourceforge.net/
On Mon, 20 May 2019 18:06:38 +0400, Alexey Sheplyakov <asheplyakov@yandex.ru> said:
ASh> Hello, ASh> 20.05.2019, 02:29, "Vladimir V. Kisil" ASh> <kisilv@maths.leeds.ac.uk>: >> Many thanks for the useful suggestions. I have revised my >> patch in accordance with your first suggestion: both the old >> and the new version are present. This patch is attached below. ASh> This version looks better, but >> +ex remove_dirac_ONE(const ex & e, bool *success, unsigned char >> rl = 0, unsigned options = 0); + ASh> it still subtly changes the meaning of ASh> remove_dirac_ONE(e, 0, 0); ASh> Before the patch it was remove_dirac_ONE(e, /* rl = */ 0, /* ASh> options = */ 0), and with patch it's remove_dirac_ONE(e, /* ASh> success = */ 0, /* rl = */ 0) which ASh> 1) does not throw an exception on error 2) segfaults ASh> Please change the prototype (of the non-throwing function) to ASh> ex remove_dirac_ONE(const ex& e, bool& success, unsigned char ASh> rl = 0, unsigned options = 0); ASh> This way the compiler can pick the correct overload ASh> e = remove_dirac_ONE(e, 0, 0); // OK: remove_dirac_ONE(const ASh> ex&, unsigned char, unsigned) bool ok = false; e = ASh> remove_dirac_ONE(e, ok, 0, 0); >> Regarding crashes of my application the situation was solved by >> partial substitution: I was able to avoid crashes keeping the >> original version of GiNaC. It was enough to replace calls to >> exception-free version of remove_dirac_ONE to in my library >> only. Probably exceptions work fine within one library but >> create crashes if passed between different libraries. ASh> I don't quite understand how patching *just* remove_dirac_ONE ASh> could possibly avoid the cross-DLL exceptions problem. See, ASh> many (most?) GiNaC methods and functions use exceptions to ASh> report an error. For instance, pseries::power_const throws ASh> pole_error. Why this one is not a problem? What's special about ASh> remove_dirac_ONE? ASh> Best regards, Alexey ASh> _______________________________________________ GiNaC-devel ASh> mailing list GiNaC-devel@ginac.de ASh> https://www.cebix.net/mailman/listinfo/ginac-devel