~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
18
#ifndef DRIZZLED_THR_LOCK_H
19
#define DRIZZLED_THR_LOCK_H
20
1786.2.1 by Brian Aker
Current boost work (more conversion).
21
#include <boost/thread/mutex.hpp>
1812.3.7 by Brian Aker
Typdef our lock type.
22
#include <boost/thread/shared_mutex.hpp>
1786.2.1 by Brian Aker
Current boost work (more conversion).
23
#include <boost/thread/condition_variable.hpp>
1122.2.10 by Monty Taylor
Fixed all of the include guards.
24
2119.4.1 by Monty Taylor
Turns on -fvisibility=hidden by default. Symbols intended to be used by
25
#include "drizzled/visibility.h"
26
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
27
namespace drizzled
28
{
1 by brian
clean slate
29
622.1.1 by Brian Aker
32bit fixes around vars
30
extern uint64_t max_write_lock_count;
31
extern uint64_t table_lock_wait_timeout;
1 by brian
clean slate
32
1241.9.43 by Monty Taylor
Merged trunk. Also renamed thr_lock. Doh. I hate it when I do both.
33
34
enum thr_lock_type { TL_IGNORE=-1,
35
                     /* UNLOCK ANY LOCK */
36
                     TL_UNLOCK,
37
                     /* Read lock */
38
                     TL_READ,
39
                     TL_READ_WITH_SHARED_LOCKS,
40
                     /* READ, Don't allow concurrent insert */
41
                     TL_READ_NO_INSERT,
42
                     /*
43
                       Write lock, but allow other threads to read / write.
44
                       Used by BDB tables in MySQL to mark that someone is
45
                       reading/writing to the table.
46
                     */
47
                     TL_WRITE_ALLOW_WRITE,
48
                     /*
49
                       Write lock, but allow other threads to read.
50
                       Used by ALTER TABLE in MySQL to allow readers
51
                       to use the table until ALTER TABLE is finished.
52
                     */
53
                     TL_WRITE_ALLOW_READ,
54
                     /*
55
                       WRITE lock used by concurrent insert. Will allow
56
                       READ, if one could use concurrent insert on table.
57
                     */
58
                     TL_WRITE_CONCURRENT_INSERT,
59
                     /*
60
                       parser only! Late bound low_priority flag.
61
                       At open_tables() becomes thd->update_lock_default.
62
                     */
63
                     TL_WRITE_DEFAULT,
64
                     /* Normal WRITE lock */
65
                     TL_WRITE,
66
                     /* Abort new lock request with an error */
67
                     TL_WRITE_ONLY};
68
69
enum enum_thr_lock_result { THR_LOCK_SUCCESS= 0, THR_LOCK_ABORTED= 1,
70
                            THR_LOCK_WAIT_TIMEOUT= 2, THR_LOCK_DEADLOCK= 3 };
1 by brian
clean slate
71
/*
72
  A description of the thread which owns the lock. The address
73
  of an instance of this structure is used to uniquely identify the thread.
74
*/
75
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
76
struct THR_LOCK_INFO
1 by brian
clean slate
77
{
1241.9.43 by Monty Taylor
Merged trunk. Also renamed thr_lock. Doh. I hate it when I do both.
78
  uint64_t thread_id;
298 by Brian Aker
ulong conversion.
79
  uint32_t n_cursors;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
80
81
  THR_LOCK_INFO() : 
82
    thread_id(0),
83
    n_cursors(0)
84
  { }
85
1689.2.12 by Brian Aker
THR_LOCK_INFO::init() <-- encapsulation
86
  void init();
87
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
88
};
1 by brian
clean slate
89
90
/*
91
  Lock owner identifier. Globally identifies the lock owner within the
92
  thread and among all the threads. The address of an instance of this
93
  structure is used as id.
94
*/
95
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
96
struct THR_LOCK_OWNER
1 by brian
clean slate
97
{
98
  THR_LOCK_INFO *info;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
99
100
  THR_LOCK_OWNER() :
101
    info(0)
102
  { }
103
104
};
105
106
struct THR_LOCK;
107
struct THR_LOCK_DATA;
108
2119.4.1 by Monty Taylor
Turns on -fvisibility=hidden by default. Symbols intended to be used by
109
struct DRIZZLED_API THR_LOCK_DATA {
1 by brian
clean slate
110
  THR_LOCK_OWNER *owner;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
111
  struct THR_LOCK_DATA *next,**prev;
112
  struct THR_LOCK *lock;
1812.3.5 by Brian Aker
Move to boost condition_any
113
  boost::condition_variable_any *cond;
1 by brian
clean slate
114
  enum thr_lock_type type;
115
  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
116
117
  THR_LOCK_DATA() :
118
    owner(0),
119
    next(0),
120
    prev(0),
121
    lock(0),
122
    cond(0),
123
    type(TL_UNLOCK),
124
    status_param(0)
125
  { }
1689.2.13 by Brian Aker
More encapsulation of thr_lock
126
127
  void init(THR_LOCK *lock,
128
            void *status_param= NULL);
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
129
};
1 by brian
clean slate
130
131
struct st_lock_list {
132
  THR_LOCK_DATA *data,**last;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
133
134
  st_lock_list() :
135
    data(0),
136
    last(0)
137
  { }
1 by brian
clean slate
138
};
139
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
140
struct THR_LOCK {
1689.2.11 by Brian Aker
Encapsulate more of the thr lock.
141
private:
1786.2.1 by Brian Aker
Current boost work (more conversion).
142
  boost::mutex mutex;
1689.2.11 by Brian Aker
Encapsulate more of the thr lock.
143
public:
1 by brian
clean slate
144
  struct st_lock_list read_wait;
145
  struct st_lock_list read;
146
  struct st_lock_list write_wait;
147
  struct st_lock_list write;
148
  /* write_lock_count is incremented for write locks and reset on read locks */
298 by Brian Aker
ulong conversion.
149
  uint32_t write_lock_count;
482 by Brian Aker
Remove uint.
150
  uint32_t read_no_write_count;
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
151
152
  THR_LOCK() :
153
    write_lock_count(0),
154
    read_no_write_count(0)
155
  { }
156
157
  ~THR_LOCK()
158
  { }
159
160
  void abort_locks();
161
  bool abort_locks_for_thread(uint64_t thread);
162
163
  void lock()
164
  {
1786.2.1 by Brian Aker
Current boost work (more conversion).
165
    mutex.lock();
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
166
  }
167
168
  void unlock()
169
  {
1786.2.1 by Brian Aker
Current boost work (more conversion).
170
    mutex.unlock();
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
171
  }
172
173
  void init()
174
  {
175
  }
176
177
  void deinit()
178
  {
179
  }
180
1786.2.1 by Brian Aker
Current boost work (more conversion).
181
  boost::mutex *native_handle()
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
182
  {
183
    return &mutex;
184
  }
185
};
186
1960.1.1 by Brian Aker
Remove dead code in wait, pass session.
187
class Session; 
1685.2.1 by Brian Aker
This removes custom myisam lock code from the kernel (and removes the
188
1 by brian
clean slate
189
#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
190
DRIZZLED_API void thr_lock_init(THR_LOCK *lock);
1960.1.1 by Brian Aker
Remove dead code in wait, pass session.
191
enum enum_thr_lock_result thr_multi_lock(Session &session, THR_LOCK_DATA **data,
482 by Brian Aker
Remove uint.
192
                                         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
193
void thr_multi_unlock(THR_LOCK_DATA **data,uint32_t count);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
194
195
} /* namespace drizzled */
196
1241.9.43 by Monty Taylor
Merged trunk. Also renamed thr_lock. Doh. I hate it when I do both.
197
#endif /* DRIZZLED_THR_LOCK_H */