| 3987 | } |
| 3988 | |
| 3989 | Savepoint* jrd_tra::startSavepoint(bool root) |
| 3990 | /************************************** |
| 3991 | * |
| 3992 | * s t a r t S a v e p o i n t |
| 3993 | * |
| 3994 | ************************************** |
| 3995 | * |
| 3996 | * Functional description |
| 3997 | * Start a new savepoint. Reuse some priorly allocated one, if exists. |
| 3998 | * |
| 3999 | **************************************/ |
| 4000 | { |
| 4001 | Savepoint* savepoint = tra_save_free; |
| 4002 | |
| 4003 | if (savepoint) |
| 4004 | tra_save_free = savepoint->getNext(); |
| 4005 | else |
| 4006 | savepoint = FB_NEW_POOL(*tra_pool) Savepoint(this); |
| 4007 | |
| 4008 | const SavNumber number = ++tra_save_point_number; |
| 4009 | savepoint->init(number, root, tra_save_point); |
| 4010 | tra_save_point = savepoint; |
| 4011 | |
| 4012 | return savepoint; |
| 4013 | } |
| 4014 | |
| 4015 | void jrd_tra::rollbackSavepoint(thread_db* tdbb, bool preserveLocks) |
| 4016 | /************************************** |
no test coverage detected