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