2001-02-17 14:19:19 +02:00
|
|
|
/******************************************************
|
|
|
|
The wait array used in synchronization primitives
|
|
|
|
|
|
|
|
(c) 1995 Innobase Oy
|
|
|
|
|
|
|
|
Created 9/5/1995 Heikki Tuuri
|
|
|
|
*******************************************************/
|
|
|
|
|
|
|
|
#ifndef sync0arr_h
|
|
|
|
#define sync0arr_h
|
|
|
|
|
|
|
|
#include "univ.i"
|
|
|
|
#include "ut0lst.h"
|
|
|
|
#include "ut0mem.h"
|
|
|
|
#include "os0thread.h"
|
|
|
|
|
|
|
|
typedef struct sync_cell_struct sync_cell_t;
|
|
|
|
typedef struct sync_array_struct sync_array_t;
|
|
|
|
|
|
|
|
#define SYNC_ARRAY_OS_MUTEX 1
|
|
|
|
#define SYNC_ARRAY_MUTEX 2
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
Creates a synchronization wait array. It is protected by a mutex
|
|
|
|
which is automatically reserved when the functions operating on it
|
|
|
|
are called. */
|
|
|
|
|
|
|
|
sync_array_t*
|
|
|
|
sync_array_create(
|
|
|
|
/*==============*/
|
|
|
|
/* out, own: created wait array */
|
|
|
|
ulint n_cells, /* in: number of cells in the array
|
|
|
|
to create */
|
|
|
|
ulint protection); /* in: either SYNC_ARRAY_OS_MUTEX or
|
|
|
|
SYNC_ARRAY_MUTEX: determines the type
|
|
|
|
of mutex protecting the data structure */
|
|
|
|
/**********************************************************************
|
|
|
|
Frees the resources in a wait array. */
|
|
|
|
|
|
|
|
void
|
|
|
|
sync_array_free(
|
|
|
|
/*============*/
|
|
|
|
sync_array_t* arr); /* in, own: sync wait array */
|
|
|
|
/**********************************************************************
|
|
|
|
Reserves a wait array cell for waiting for an object.
|
|
|
|
The event of the cell is reset to nonsignalled state. */
|
|
|
|
|
|
|
|
void
|
|
|
|
sync_array_reserve_cell(
|
|
|
|
/*====================*/
|
|
|
|
sync_array_t* arr, /* in: wait array */
|
|
|
|
void* object, /* in: pointer to the object to wait for */
|
|
|
|
ulint type, /* in: lock request type */
|
2004-05-14 16:06:21 +03:00
|
|
|
const char* file, /* in: file where requested */
|
2001-10-10 22:47:08 +03:00
|
|
|
ulint line, /* in: line where requested */
|
|
|
|
ulint* index); /* out: index of the reserved cell */
|
2001-02-17 14:19:19 +02:00
|
|
|
/**********************************************************************
|
|
|
|
This function should be called when a thread starts to wait on
|
|
|
|
a wait array cell. In the debug version this function checks
|
|
|
|
if the wait for a semaphore will result in a deadlock, in which
|
|
|
|
case prints info and asserts. */
|
|
|
|
|
|
|
|
void
|
|
|
|
sync_array_wait_event(
|
|
|
|
/*==================*/
|
|
|
|
sync_array_t* arr, /* in: wait array */
|
|
|
|
ulint index); /* in: index of the reserved cell */
|
|
|
|
/**********************************************************************
|
|
|
|
Frees the cell. NOTE! sync_array_wait_event frees the cell
|
|
|
|
automatically! */
|
|
|
|
|
|
|
|
void
|
|
|
|
sync_array_free_cell(
|
|
|
|
/*=================*/
|
|
|
|
sync_array_t* arr, /* in: wait array */
|
|
|
|
ulint index); /* in: index of the cell in array */
|
|
|
|
/**************************************************************************
|
|
|
|
Looks for the cells in the wait array which refer
|
|
|
|
to the wait object specified,
|
|
|
|
and sets their corresponding events to the signaled state. In this
|
|
|
|
way releases the threads waiting for the object to contend for the object.
|
|
|
|
It is possible that no such cell is found, in which case does nothing. */
|
|
|
|
|
|
|
|
void
|
|
|
|
sync_array_signal_object(
|
|
|
|
/*=====================*/
|
|
|
|
sync_array_t* arr, /* in: wait array */
|
|
|
|
void* object);/* in: wait object */
|
2001-10-10 22:47:08 +03:00
|
|
|
/**************************************************************************
|
|
|
|
If the wakeup algorithm does not work perfectly at semaphore relases,
|
|
|
|
this function will do the waking (see the comment in mutex_exit). This
|
|
|
|
function should be called about every 1 second in the server. */
|
|
|
|
|
|
|
|
void
|
|
|
|
sync_arr_wake_threads_if_sema_free(void);
|
|
|
|
/*====================================*/
|
|
|
|
/**************************************************************************
|
2004-07-12 15:13:18 +03:00
|
|
|
Prints warnings of long semaphore waits to stderr. */
|
2001-10-10 22:47:08 +03:00
|
|
|
|
2004-10-07 15:58:47 +03:00
|
|
|
ibool
|
2001-10-10 22:47:08 +03:00
|
|
|
sync_array_print_long_waits(void);
|
|
|
|
/*=============================*/
|
2004-10-07 15:58:47 +03:00
|
|
|
/* out: TRUE if fatal semaphore wait threshold
|
|
|
|
was exceeded */
|
2001-02-17 14:19:19 +02:00
|
|
|
/************************************************************************
|
|
|
|
Validates the integrity of the wait array. Checks
|
|
|
|
that the number of reserved cells equals the count variable. */
|
|
|
|
|
|
|
|
void
|
|
|
|
sync_array_validate(
|
|
|
|
/*================*/
|
|
|
|
sync_array_t* arr); /* in: sync wait array */
|
|
|
|
/**************************************************************************
|
|
|
|
Prints info of the wait array. */
|
|
|
|
|
|
|
|
void
|
|
|
|
sync_array_print_info(
|
|
|
|
/*==================*/
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 16:14:43 +03:00
|
|
|
FILE* file, /* in: file where to print */
|
2001-02-17 14:19:19 +02:00
|
|
|
sync_array_t* arr); /* in: wait array */
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef UNIV_NONINL
|
|
|
|
#include "sync0arr.ic"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|