summaryrefslogtreecommitdiff
path: root/innobase/trx/trx0trx.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/trx/trx0trx.c')
-rw-r--r--innobase/trx/trx0trx.c101
1 files changed, 53 insertions, 48 deletions
diff --git a/innobase/trx/trx0trx.c b/innobase/trx/trx0trx.c
index 54358ad3d4c..a69b9a96824 100644
--- a/innobase/trx/trx0trx.c
+++ b/innobase/trx/trx0trx.c
@@ -26,10 +26,10 @@ Created 3/26/1996 Heikki Tuuri
#include "os0proc.h"
/* Copy of the prototype for innobase_mysql_print_thd: this
-copy MUST be equal to the one in mysql/sql/ha_innobase.cc ! */
+copy MUST be equal to the one in mysql/sql/ha_innodb.cc ! */
void innobase_mysql_print_thd(
- char* buf,
+ FILE* f,
void* thd);
/* Dummy session used currently in MySQL interface */
@@ -239,19 +239,17 @@ trx_free(
/*=====*/
trx_t* trx) /* in, own: trx object */
{
- char err_buf[1000];
-
#ifdef UNIV_SYNC_DEBUG
ut_ad(mutex_own(&kernel_mutex));
#endif /* UNIV_SYNC_DEBUG */
if (trx->declared_to_be_inside_innodb) {
ut_print_timestamp(stderr);
- trx_print(err_buf, trx);
-
- fprintf(stderr,
+ fputs(
" InnoDB: Error: Freeing a trx which is declared to be processing\n"
-"InnoDB: inside InnoDB.\n%s\n", err_buf);
+"InnoDB: inside InnoDB.\n", stderr);
+ trx_print(stderr, trx);
+ putc('\n', stderr);
}
ut_a(trx->magic_n == TRX_MAGIC_N);
@@ -758,7 +756,8 @@ trx_commit_off_kernel(
trx->read_view = NULL;
}
-/* printf("Trx %lu commit finished\n", ut_dulint_get_low(trx->id)); */
+/* fprintf(stderr, "Trx %lu commit finished\n",
+ ut_dulint_get_low(trx->id)); */
if (must_flush_log) {
@@ -1568,93 +1567,99 @@ own the kernel mutex. */
void
trx_print(
/*======*/
- char* buf, /* in/out: buffer where to print, must be at least
- 800 bytes */
+ FILE* f, /* in: output stream */
trx_t* trx) /* in: transaction */
{
- char* start_of_line;
+ ibool newline;
- buf += sprintf(buf, "TRANSACTION %lu %lu",
+ fprintf(f, "TRANSACTION %lu %lu",
(ulong) ut_dulint_get_high(trx->id),
(ulong) ut_dulint_get_low(trx->id));
switch (trx->conc_state) {
- case TRX_NOT_STARTED: buf += sprintf(buf,
- ", not started"); break;
- case TRX_ACTIVE: buf += sprintf(buf,
- ", ACTIVE %lu sec",
- (ulong) difftime(time(NULL), trx->start_time)); break;
- case TRX_COMMITTED_IN_MEMORY: buf += sprintf(buf,
- ", COMMITTED IN MEMORY");
+ case TRX_NOT_STARTED:
+ fputs(", not started", f);
+ break;
+ case TRX_ACTIVE:
+ fprintf(f, ", ACTIVE %lu sec",
+ (ulong)difftime(time(NULL), trx->start_time));
break;
- default: buf += sprintf(buf, " state %lu", (ulong) trx->conc_state);
+ case TRX_COMMITTED_IN_MEMORY:
+ fputs(", COMMITTED IN MEMORY", f);
+ break;
+ default:
+ fprintf(f, " state %lu", (ulong) trx->conc_state);
}
#ifdef UNIV_LINUX
- buf += sprintf(buf, ", process no %lu", trx->mysql_process_no);
+ fprintf(f, ", process no %lu", trx->mysql_process_no);
#endif
- buf += sprintf(buf, ", OS thread id %lu",
+ fprintf(f, ", OS thread id %lu",
(ulong) os_thread_pf(trx->mysql_thread_id));
- if (ut_strlen(trx->op_info) > 0) {
- buf += sprintf(buf, " %s", trx->op_info);
+ if (*trx->op_info) {
+ putc(' ', f);
+ fputs(trx->op_info, f);
}
if (trx->type != TRX_USER) {
- buf += sprintf(buf, " purge trx");
+ fputs(" purge trx", f);
}
if (trx->declared_to_be_inside_innodb) {
- buf += sprintf(buf, ", thread declared inside InnoDB %lu",
+ fprintf(f, ", thread declared inside InnoDB %lu",
(ulong) trx->n_tickets_to_enter_innodb);
}
- buf += sprintf(buf, "\n");
+ putc('\n', f);
if (trx->n_mysql_tables_in_use > 0 || trx->mysql_n_tables_locked > 0) {
- buf += sprintf(buf, "mysql tables in use %lu, locked %lu\n",
- (ulong) trx->n_mysql_tables_in_use,
- (ulong) trx->mysql_n_tables_locked);
+ fprintf(f, "mysql tables in use %lu, locked %lu\n",
+ (ulong) trx->n_mysql_tables_in_use,
+ (ulong) trx->mysql_n_tables_locked);
}
- start_of_line = buf;
+ newline = TRUE;
switch (trx->que_state) {
- case TRX_QUE_RUNNING: break;
- case TRX_QUE_LOCK_WAIT: buf += sprintf(buf,
- "LOCK WAIT "); break;
- case TRX_QUE_ROLLING_BACK: buf += sprintf(buf,
- "ROLLING BACK "); break;
- case TRX_QUE_COMMITTING: buf += sprintf(buf,
- "COMMITTING "); break;
- default: buf += sprintf(buf, "que state %lu", (ulong) trx->que_state);
+ case TRX_QUE_RUNNING:
+ newline = FALSE; break;
+ case TRX_QUE_LOCK_WAIT:
+ fputs("LOCK WAIT ", f); break;
+ case TRX_QUE_ROLLING_BACK:
+ fputs("ROLLING BACK ", f); break;
+ case TRX_QUE_COMMITTING:
+ fputs("COMMITTING ", f); break;
+ default:
+ fprintf(f, "que state %lu ", (ulong) trx->que_state);
}
if (0 < UT_LIST_GET_LEN(trx->trx_locks) ||
mem_heap_get_size(trx->lock_heap) > 400) {
+ newline = TRUE;
- buf += sprintf(buf,
-"%lu lock struct(s), heap size %lu",
+ fprintf(f, "%lu lock struct(s), heap size %lu",
(ulong) UT_LIST_GET_LEN(trx->trx_locks),
(ulong) mem_heap_get_size(trx->lock_heap));
}
if (trx->has_search_latch) {
- buf += sprintf(buf, ", holds adaptive hash latch");
+ newline = TRUE;
+ fputs(", holds adaptive hash latch", f);
}
if (ut_dulint_cmp(trx->undo_no, ut_dulint_zero) != 0) {
- buf += sprintf(buf, ", undo log entries %lu",
+ newline = TRUE;
+ fprintf(f, ", undo log entries %lu",
(ulong) ut_dulint_get_low(trx->undo_no));
}
- if (buf != start_of_line) {
-
- buf += sprintf(buf, "\n");
+ if (newline) {
+ putc('\n', f);
}
if (trx->mysql_thd != NULL) {
- innobase_mysql_print_thd(buf, trx->mysql_thd);
+ innobase_mysql_print_thd(f, trx->mysql_thd);
}
}