| MySQL 5.6.14 Source Code Document
    | 
#include <sync0rw.h>

| Public Member Functions | |
| UT_LIST_NODE_T (rw_lock_t) list | |
| Public Attributes | |
| volatile lint | lock_word | 
| volatile ulint | waiters | 
| volatile ibool | recursive | 
| volatile os_thread_id_t | writer_thread | 
| os_event_t | event | 
| os_event_t | wait_ex_event | 
| ib_mutex_t | mutex | 
| ulint | count_os_wait | 
| const char * | cfile_name | 
| const char * | last_s_file_name | 
| const char * | last_x_file_name | 
| ibool | writer_is_wait_ex | 
| unsigned | cline:14 | 
| unsigned | last_s_line:14 | 
| unsigned | last_x_line:14 | 
The structure used in the spin lock implementation of a read-write
lock. Several threads may have a shared lock simultaneously in this lock, but only one writer may have an exclusive lock, in which case no shared locks are allowed. To prevent starving of a writer blocked by readers, a writer may queue for x-lock by decrementing lock_word: no new readers will be let in while the thread waits for readers to exit.
| rw_lock_t::UT_LIST_NODE_T | ( | rw_lock_t | ) | 
All allocated rw locks are put into a list
| const char* rw_lock_t::cfile_name | 
| ulint rw_lock_t::count_os_wait | 
| os_event_t rw_lock_t::event | 
Used by sync0arr.cc for thread queueing
| const char* rw_lock_t::last_s_file_name | 
| unsigned rw_lock_t::last_s_line | 
| const char* rw_lock_t::last_x_file_name | 
| unsigned rw_lock_t::last_x_line | 
| volatile lint rw_lock_t::lock_word | 
| ib_mutex_t rw_lock_t::mutex | 
| volatile ibool rw_lock_t::recursive | 
Default value FALSE which means the lock is non-recursive. The value is typically set to TRUE making normal rw_locks recursive. In case of asynchronous IO, when a non-zero value of 'pass' is passed then we keep the lock non-recursive. This flag also tells us about the state of writer_thread field. If this flag is set then writer_thread MUST contain the thread id of the current x-holder or wait-x thread. This flag must be reset in x_unlock functions before incrementing the lock_word
| os_event_t rw_lock_t::wait_ex_event | 
| ibool rw_lock_t::writer_is_wait_ex | 
| volatile os_thread_id_t rw_lock_t::writer_thread |