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

Reply via email to