11.04.2014 18:37, Dimitry Sibiryakov wrote: > > Could anybody explain me the purpose of following piece of code in > VIO_proc_merge_save_point(), please? > >> if ( (sav_point = transaction->tra_save_free) ) { >> transaction->tra_save_free = sav_point->sav_next; >> } >> else { >> sav_point = FB_NEW(*transaction->tra_pool) Savepoint(); >> } >> sav_point->sav_next = sav_next; >> sav_point->sav_number = sav_number; >> *sav_point_list = sav_point; >> sav_point_list = &sav_point->sav_next; > > My best guess is that this routine is called on SUSPEND, so all already > happened > changes must be merged to procedure savepoint because they must not be > undonable, but > stack has to be preserved because nested DML will continue working.
This is correct, provided that I get you right. We have to preserve the stack so that the procedure continues with the same savepoints after getting back into the looper after processing SUSPEND. Dmitry ------------------------------------------------------------------------------ Put Bad Developers to Shame Dominate Development with Jenkins Continuous Integration Continuously Automate Build, Test & Deployment Start a new project now. Try Jenkins in the cloud. http://p.sf.net/sfu/13600_Cloudbees Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel