~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2000 MySQL AB
2
3
   This program is free software; you can redistribute it and/or modify
4
   it under the terms of the GNU General Public License as published by
5
   the Free Software Foundation; version 2 of the License.
6
7
   This program is distributed in the hope that it will be useful,
8
   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
   GNU General Public License for more details.
11
12
   You should have received a copy of the GNU General Public License
13
   along with this program; if not, write to the Free Software
1802.10.2 by Monty Taylor
Update all of the copyright headers to include the correct address.
14
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
1 by brian
clean slate
15
1241.9.43 by Monty Taylor
Merged trunk. Also renamed thr_lock. Doh. I hate it when I do both.
16
/* For use with thr_locks */
17
2234 by Brian Aker
Mass removal of ifdef/endif in favor of pragma once.
18
#pragma once
1241.9.43 by Monty Taylor
Merged trunk. Also renamed thr_lock. Doh. I hate it when I do both.
19
1786.2.1 by Brian Aker
Current boost work (more conversion).
20
#include <boost/thread/mutex.hpp>
1812.3.7 by Brian Aker
Typdef our lock type.
21
#include <boost/thread/shared_mutex.hpp>
1786.2.1 by Brian Aker
Current boost work (more conversion).
22
#include <boost/thread/condition_variable.hpp>
1122.2.10 by Monty Taylor
Fixed all of the include guards.
23
2173.2.1 by Monty Taylor
Fixes incorrect usage of include
24
#include <drizzled/visibility.h>
2119.4.1 by Monty Taylor
Turns on -fvisibility=hidden by default. Symbols intended to be used by
25
2385.2.3 by Olaf van der Spek
cppcheck
26
namespace drizzled {
1 by brian
clean slate
27
622.1.1 by Brian Aker
32bit fixes around vars
28
extern uint64_t max_write_lock_count;
29
extern uint64_t table_lock_wait_timeout;
1 by brian
clean slate
30
1241.9.43 by Monty Taylor
Merged trunk. Also renamed thr_lock. Doh. I hate it when I do both.
31
32
enum thr_lock_type { TL_IGNORE=-1,
33
                     /* UNLOCK ANY LOCK */
34
                     TL_UNLOCK,
35
                     /* Read lock */
36
                     TL_READ,
37
                     TL_READ_WITH_SHARED_LOCKS,
38
                     /* READ, Don't allow concurrent insert */
39
                     TL_READ_NO_INSERT,
40
                     /*
41
                       Write lock, but allow other threads to read / write.
42
                       Used by BDB tables in MySQL to mark that someone is
43
                       reading/writing to the table.
44
                     */
45
                     TL_WRITE_ALLOW_WRITE,
46
                     /*
47
                       Write lock, but allow other threads to read.
48
                       Used by ALTER TABLE in MySQL to allow readers
49
                       to use the table until ALTER TABLE is finished.
50
                     */
51
                     TL_WRITE_ALLOW_READ,
52
                     /*
53
                       WRITE lock used by concurrent insert. Will allow
54
                       READ, if one could use concurrent insert on table.
55
                     */
56
                     TL_WRITE_CONCURRENT_INSERT,
57
                     /*
58
                       parser only! Late bound low_priority flag.
59
                       At open_tables() becomes thd->update_lock_default.
60
                     */
61
                     TL_WRITE_DEFAULT,
62
                     /* Normal WRITE lock */
63
                     TL_WRITE,
64
                     /* Abort new lock request with an error */
65
                     TL_WRITE_ONLY};
66
67
enum enum_thr_lock_result { THR_LOCK_SUCCESS= 0, THR_LOCK_ABORTED= 1,
68
                            THR_LOCK_WAIT_TIMEOUT= 2, THR_LOCK_DEADLOCK= 3 };
1 by brian
clean slate
69
/*
70
  A description of the thread which owns the lock. The address
71
  of an instance of this structure is used to uniquely identify the thread.
72
*/
73
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
74
struct THR_LOCK_INFO
1 by brian
clean slate
75
{
1241.9.43 by Monty Taylor
Merged trunk. Also renamed thr_lock. Doh. I hate it when I do both.
76
  uint64_t thread_id;
298 by Brian Aker
ulong conversion.
77
  uint32_t n_cursors;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
78
79
  THR_LOCK_INFO() : 
80
    thread_id(0),
81
    n_cursors(0)
82
  { }
83
1689.2.12 by Brian Aker
THR_LOCK_INFO::init() <-- encapsulation
84
  void init();
85
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
86
};
1 by brian
clean slate
87
88
/*
89
  Lock owner identifier. Globally identifies the lock owner within the
90
  thread and among all the threads. The address of an instance of this
91
  structure is used as id.
92
*/
93
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
94
struct THR_LOCK_OWNER
1 by brian
clean slate
95
{
96
  THR_LOCK_INFO *info;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
97
98
  THR_LOCK_OWNER() :
99
    info(0)
100
  { }
101
102
};
103
104
struct THR_LOCK;
105
struct THR_LOCK_DATA;
106
2119.4.1 by Monty Taylor
Turns on -fvisibility=hidden by default. Symbols intended to be used by
107
struct DRIZZLED_API THR_LOCK_DATA {
1 by brian
clean slate
108
  THR_LOCK_OWNER *owner;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
109
  struct THR_LOCK_DATA *next,**prev;
110
  struct THR_LOCK *lock;
1812.3.5 by Brian Aker
Move to boost condition_any
111
  boost::condition_variable_any *cond;
1 by brian
clean slate
112
  enum thr_lock_type type;
113
  void *status_param;			/* Param to status functions */
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
114
115
  THR_LOCK_DATA() :
116
    owner(0),
117
    next(0),
118
    prev(0),
119
    lock(0),
120
    cond(0),
121
    type(TL_UNLOCK),
122
    status_param(0)
123
  { }
1689.2.13 by Brian Aker
More encapsulation of thr_lock
124
125
  void init(THR_LOCK *lock,
126
            void *status_param= NULL);
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
127
};
1 by brian
clean slate
128
129
struct st_lock_list {
130
  THR_LOCK_DATA *data,**last;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
131
132
  st_lock_list() :
133
    data(0),
134
    last(0)
135
  { }
1 by brian
clean slate
136
};
137
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
138
struct THR_LOCK {
1689.2.11 by Brian Aker
Encapsulate more of the thr lock.
139
private:
1786.2.1 by Brian Aker
Current boost work (more conversion).
140
  boost::mutex mutex;
1689.2.11 by Brian Aker
Encapsulate more of the thr lock.
141
public:
1 by brian
clean slate
142
  struct st_lock_list read_wait;
143
  struct st_lock_list read;
144
  struct st_lock_list write_wait;
145
  struct st_lock_list write;
146
  /* write_lock_count is incremented for write locks and reset on read locks */
298 by Brian Aker
ulong conversion.
147
  uint32_t write_lock_count;
482 by Brian Aker
Remove uint.
148
  uint32_t read_no_write_count;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
149
150
  THR_LOCK() :
151
    write_lock_count(0),
152
    read_no_write_count(0)
153
  { }
154
155
  void abort_locks();
156
  bool abort_locks_for_thread(uint64_t thread);
157
158
  void lock()
159
  {
1786.2.1 by Brian Aker
Current boost work (more conversion).
160
    mutex.lock();
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
161
  }
162
163
  void unlock()
164
  {
1786.2.1 by Brian Aker
Current boost work (more conversion).
165
    mutex.unlock();
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
166
  }
167
1786.2.1 by Brian Aker
Current boost work (more conversion).
168
  boost::mutex *native_handle()
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
169
  {
170
    return &mutex;
171
  }
172
};
173
1 by brian
clean slate
174
#define thr_lock_owner_init(owner, info_arg) (owner)->info= (info_arg)
2119.4.1 by Monty Taylor
Turns on -fvisibility=hidden by default. Symbols intended to be used by
175
DRIZZLED_API void thr_lock_init(THR_LOCK *lock);
1960.1.1 by Brian Aker
Remove dead code in wait, pass session.
176
enum enum_thr_lock_result thr_multi_lock(Session &session, THR_LOCK_DATA **data,
482 by Brian Aker
Remove uint.
177
                                         uint32_t count, THR_LOCK_OWNER *owner);
1948.2.1 by Brian Aker
Fix for 680028, crash on SELECT FOR UPDATE afer FLUSH TABLES WITH READ LOCKS
178
void thr_multi_unlock(THR_LOCK_DATA **data,uint32_t count);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
179
180
} /* namespace drizzled */
181