27
27
#include "access/transam.h"
28
28
#include "access/twophase.h"
29
29
#include "access/xact.h"
30
+ #include "access/xtm.h"
30
31
#include "access/xlog.h"
31
32
#include "access/xloginsert.h"
32
33
#include "access/xlogutils.h"
@@ -4826,8 +4827,9 @@ EstimateTransactionStateSpace(void)
4826
4827
nxids = add_size (nxids ,s -> nChildXids );
4827
4828
}
4828
4829
4829
- nxids = add_size (nxids ,nParallelCurrentXids );
4830
- return mul_size (nxids ,sizeof (TransactionId ));
4830
+ nxids = add_size (nxids ,nParallelCurrentXids );
4831
+ nxids = mul_size (nxids ,sizeof (TransactionId ));
4832
+ return add_size (nxids ,TM -> GetTransactionStateSize ());
4831
4833
}
4832
4834
4833
4835
/*
@@ -4873,6 +4875,7 @@ SerializeTransactionState(Size maxsize, char *start_address)
4873
4875
Assert (maxsize >= (nParallelCurrentXids + c )* sizeof (TransactionId ));
4874
4876
memcpy (& result [c ],ParallelCurrentXids ,
4875
4877
nParallelCurrentXids * sizeof (TransactionId ));
4878
+ TM -> SerializeTransactionState (& result [c + nParallelCurrentXids ]);
4876
4879
return ;
4877
4880
}
4878
4881
@@ -4906,6 +4909,7 @@ SerializeTransactionState(Size maxsize, char *start_address)
4906
4909
/* Copy data into output area. */
4907
4910
result [c ++ ]= (TransactionId )nxids ;
4908
4911
memcpy (& result [c ],workspace ,nxids * sizeof (TransactionId ));
4912
+ TM -> SerializeTransactionState (& result [c + nxids ]);
4909
4913
}
4910
4914
4911
4915
/*
@@ -4928,6 +4932,7 @@ StartParallelWorkerTransaction(char *tstatespace)
4928
4932
currentCommandId = tstate [4 ];
4929
4933
nParallelCurrentXids = (int )tstate [5 ];
4930
4934
ParallelCurrentXids = & tstate [6 ];
4935
+ TM -> DeserializeTransactionState (& tstate [nParallelCurrentXids + 6 ]);
4931
4936
4932
4937
CurrentTransactionState -> blockState = TBLOCK_PARALLEL_INPROGRESS ;
4933
4938
}