3636#define INVALID_CID 0
3737#define MIN_WAIT_TIMEOUT 1000
3838#define MAX_WAIT_TIMEOUT 100000
39- #define MAX_GTID_SIZE 16
4039#define HASH_PER_ELEM_OVERHEAD 64
4140
4241#define USEC 1000000
@@ -297,12 +296,6 @@ dtm_shmem_startup(void)
297296 DtmInitialize ();
298297}
299298
300- static GlobalTransactionId
301- dtm_get_global_trans_id ()
302- {
303- return GetLockedGlobalTransactionId ();
304- }
305-
306299static void
307300dtm_xact_callback (XactEvent event , void * arg )
308301{
@@ -324,15 +317,15 @@ dtm_xact_callback(XactEvent event, void *arg)
324317 break ;
325318
326319 case XACT_EVENT_ABORT_PREPARED :
327- DtmLocalAbortPrepared (& dtm_tx , dtm_get_global_trans_id () );
320+ DtmLocalAbortPrepared (& dtm_tx );
328321 break ;
329322
330323 case XACT_EVENT_COMMIT_PREPARED :
331- DtmLocalCommitPrepared (& dtm_tx , dtm_get_global_trans_id () );
324+ DtmLocalCommitPrepared (& dtm_tx );
332325 break ;
333326
334327 case XACT_EVENT_PREPARE :
335- DtmLocalSavePreparedState (dtm_get_global_trans_id () );
328+ DtmLocalSavePreparedState (& dtm_tx );
336329 DtmLocalEnd (& dtm_tx );
337330 break ;
338331
@@ -679,6 +672,7 @@ DtmLocalExtend(DtmCurrentTrans * x, GlobalTransactionId gtid)
679672 id -> nSubxids = 0 ;
680673 id -> subxids = 0 ;
681674 }
675+ strncpy (x -> gtid , gtid , MAX_GTID_SIZE );
682676 SpinLockRelease (& local -> lock );
683677 }
684678 x -> is_global = true;
@@ -708,6 +702,7 @@ DtmLocalAccess(DtmCurrentTrans * x, GlobalTransactionId gtid, cid_t global_cid)
708702 x -> snapshot = global_cid ;
709703 x -> is_global = true;
710704 }
705+ strncpy (x -> gtid , gtid , MAX_GTID_SIZE );
711706 SpinLockRelease (& local -> lock );
712707 if (global_cid < local_cid - DtmVacuumDelay * USEC )
713708 {
@@ -813,13 +808,13 @@ DtmLocalEndPrepare(GlobalTransactionId gtid, cid_t cid)
813808 * Mark tranasction as prepared
814809 */
815810void
816- DtmLocalCommitPrepared (DtmCurrentTrans * x , GlobalTransactionId gtid )
811+ DtmLocalCommitPrepared (DtmCurrentTrans * x )
817812{
818- Assert (gtid != NULL );
813+ Assert (x -> gtid != NULL );
819814
820815 SpinLockAcquire (& local -> lock );
821816 {
822- DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , gtid , HASH_REMOVE , NULL );
817+ DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , x -> gtid , HASH_REMOVE , NULL );
823818
824819 Assert (id != NULL );
825820
@@ -881,13 +876,13 @@ DtmLocalCommit(DtmCurrentTrans * x)
881876 * Mark tranasction as prepared
882877 */
883878void
884- DtmLocalAbortPrepared (DtmCurrentTrans * x , GlobalTransactionId gtid )
879+ DtmLocalAbortPrepared (DtmCurrentTrans * x )
885880{
886- Assert (gtid != NULL );
881+ Assert (x -> gtid != NULL );
887882
888883 SpinLockAcquire (& local -> lock );
889884 {
890- DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , gtid , HASH_REMOVE , NULL );
885+ DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , x -> gtid , HASH_REMOVE , NULL );
891886
892887 Assert (id != NULL );
893888
@@ -998,13 +993,13 @@ DtmGetCsn(TransactionId xid)
998993 * Save state of parepared transaction
999994 */
1000995void
1001- DtmLocalSavePreparedState (GlobalTransactionId gtid )
996+ DtmLocalSavePreparedState (DtmCurrentTrans * x )
1002997{
1003- if (gtid != NULL )
998+ if (x -> gtid [ 0 ] )
1004999 {
10051000 SpinLockAcquire (& local -> lock );
10061001 {
1007- DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , gtid , HASH_FIND , NULL );
1002+ DtmTransId * id = (DtmTransId * ) hash_search (gtid2xid , x -> gtid , HASH_FIND , NULL );
10081003
10091004 if (id != NULL )
10101005 {
0 commit comments