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