summaryrefslogtreecommitdiff
path: root/src/backend/access/transam/xact.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/transam/xact.c')
-rw-r--r--src/backend/access/transam/xact.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 681d8565176..315d813e920 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.73 2000/10/20 11:01:04 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.74 2000/10/21 15:43:22 vadim Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
@@ -224,6 +224,7 @@ int CommitDelay;
void xact_redo(XLogRecPtr lsn, XLogRecord *record);
void xact_undo(XLogRecPtr lsn, XLogRecord *record);
+void xact_desc(char *buf, uint8 xl_info, char* rec);
static void (*_RollbackFunc)(void*) = NULL;
static void *_RollbackData = NULL;
@@ -692,6 +693,7 @@ RecordTransactionCommit()
TransactionIdCommit(xid);
#ifdef XLOG
+ if (MyLastRecPtr.xlogid != 0 || MyLastRecPtr.xrecoff != 0)
{
xl_xact_commit xlrec;
struct timeval delay;
@@ -711,6 +713,9 @@ RecordTransactionCommit()
delay.tv_sec = 0;
delay.tv_usec = CommitDelay;
(void) select(0, NULL, NULL, NULL, &delay);
+ XLogFlush(recptr);
+ MyLastRecPtr.xlogid = 0;
+ MyLastRecPtr.xrecoff = 0;
}
#endif
/*
@@ -823,7 +828,7 @@ RecordTransactionAbort()
TransactionIdAbort(xid);
#ifdef XLOG
- if (SharedBufferChanged)
+ if (MyLastRecPtr.xlogid != 0 || MyLastRecPtr.xrecoff != 0)
{
xl_xact_abort xlrec;
XLogRecPtr recptr;
@@ -1176,6 +1181,8 @@ AbortTransaction()
AtEOXact_Files();
/* Here we'll rollback xaction changes */
+ MyLastRecPtr.xlogid = 0;
+ MyLastRecPtr.xrecoff = 0;
AtAbort_Locks();
@@ -1748,6 +1755,33 @@ xact_undo(XLogRecPtr lsn, XLogRecord *record)
else if (info != XLOG_XACT_ABORT)
elog(STOP, "xact_redo: unknown op code %u", info);
}
+
+void
+xact_desc(char *buf, uint8 xl_info, char* rec)
+{
+ uint8 info = xl_info & ~XLR_INFO_MASK;
+
+ if (info == XLOG_XACT_COMMIT)
+ {
+ xl_xact_commit *xlrec = (xl_xact_commit*) rec;
+ struct tm *tm = localtime(&xlrec->xtime);
+
+ sprintf(buf + strlen(buf), "commit: %04u-%02u-%02u %02u:%02u:%02u",
+ tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
+ tm->tm_hour, tm->tm_min, tm->tm_sec);
+ }
+ else if (info == XLOG_XACT_ABORT)
+ {
+ xl_xact_abort *xlrec = (xl_xact_abort*) rec;
+ struct tm *tm = localtime(&xlrec->xtime);
+
+ sprintf(buf + strlen(buf), "abort: %04u-%02u-%02u %02u:%02u:%02u",
+ tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
+ tm->tm_hour, tm->tm_min, tm->tm_sec);
+ }
+ else
+ strcat(buf, "UNKNOWN");
+}
void
XactPushRollback(void (*func) (void *), void* data)