Skip to content

Commit 6a095e4

Browse files
author
Tor Didriksen
committed
WL#6221 THD refactoring, remove ilink inheritance
Remove the ilink ineritance from THD, and remove global variables I_List<THD> threads; uint volatile thread_count; Add an interface for manipulating the list of THDs and the count.
1 parent a5cfaa3 commit 6a095e4

33 files changed

Lines changed: 482 additions & 319 deletions

libmysqld/lib_sql.cc

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,35 @@
1919
The following is needed to not cause conflicts when we include mysqld.cc
2020
*/
2121

22-
#define main main1
23-
#define mysql_unix_port mysql_inix_port1
24-
#define mysql_port mysql_port1
25-
2622
extern "C"
2723
{
2824
extern unsigned long max_allowed_packet, net_buffer_length;
2925
}
3026

3127
#include "../sql/mysqld.cc"
3228

33-
C_MODE_START
29+
extern "C" {
3430

3531
#include <mysql.h>
3632
#undef ER
3733
#include "errmsg.h"
3834
#include "embedded_priv.h"
3935

36+
} // extern "C"
37+
4038
#include <algorithm>
4139

4240
using std::min;
4341
using std::max;
4442

43+
extern "C" {
44+
4545
extern unsigned int mysql_server_last_errno;
4646
extern char mysql_server_last_error[MYSQL_ERRMSG_SIZE];
4747
static my_bool emb_read_query_result(MYSQL *mysql);
4848

4949

50-
extern "C" void unireg_clear(int exit_code)
50+
void unireg_clear(int exit_code)
5151
{
5252
DBUG_ENTER("unireg_clear");
5353
clean_up(!opt_help && (exit_code || !opt_bootstrap)); /* purecov: inspected */
@@ -422,9 +422,12 @@ static void emb_free_embedded_thd(MYSQL *mysql)
422422
{
423423
THD *thd= (THD*)mysql->thd;
424424
thd->clear_data_list();
425-
thread_count--;
426425
thd->store_globals();
427-
thd->unlink();
426+
427+
mysql_mutex_lock(&LOCK_thread_count);
428+
remove_global_thread(thd);
429+
mysql_mutex_unlock(&LOCK_thread_count);
430+
428431
delete thd;
429432
my_pthread_setspecific_ptr(THR_THD, 0);
430433
mysql->thd=0;
@@ -720,8 +723,9 @@ void *create_embedded_thd(int client_flag)
720723
thd->data_tail= &thd->first_data;
721724
memset(&thd->net, 0, sizeof(thd->net));
722725

723-
thread_count++;
724-
threads.push_front(thd);
726+
mysql_mutex_lock(&LOCK_thread_count);
727+
add_global_thread(thd);
728+
mysql_mutex_unlock(&LOCK_thread_count);
725729
thd->mysys_var= 0;
726730
return thd;
727731
err:
@@ -815,7 +819,8 @@ int check_embedded_connection(MYSQL *mysql, const char *db)
815819
}
816820
#endif
817821

818-
C_MODE_END
822+
} // extern "C"
823+
819824

820825
void THD::clear_data_list()
821826
{

mysql-test/r/show_check.result

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1539,13 +1539,13 @@ SET NAMES latin1;
15391539
SELECT GET_LOCK('t',1000) AS 'óóóó';;
15401540
SHOW PROCESSLIST;
15411541
Id User Host db Command Time State Info
1542-
### root ### test Query ### ### SHOW PROCESSLIST
15431542
### root ### test Query ### ### SELECT GET_LOCK('t',1000) AS 'óóóó'
1543+
### root ### test Query ### ### SHOW PROCESSLIST
15441544
SET NAMES utf8;
15451545
SHOW PROCESSLIST;
15461546
Id User Host db Command Time State Info
1547-
### root ### test Query ### ### SHOW PROCESSLIST
15481547
### root ### test Query ### ### SELECT GET_LOCK('t',1000) AS 'óóóó'
1548+
### root ### test Query ### ### SHOW PROCESSLIST
15491549
SELECT RELEASE_LOCK('t');
15501550
RELEASE_LOCK('t')
15511551
1

mysql-test/r/sp-threads.result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ lock tables t2 write;
3434
call bug9486();
3535
show processlist;
3636
Id User Host db Command Time State Info
37-
# root localhost test Sleep # NULL
3837
# root localhost test Query # Waiting for table metadata lock update t1, t2 set val= 1 where id1=id2
3938
# root localhost test Query # init show processlist
4039
# root localhost test Sleep # NULL
40+
# root localhost test Sleep # NULL
4141
unlock tables;
4242
drop procedure bug9486;
4343
drop table t1, t2;

mysql-test/suite/funcs_1/datadict/processlist_priv.inc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ WHERE DB = 'information_schema' AND COMMAND = 'Sleep' AND USER = 'ddicttestuser1
137137
--source include/wait_condition.inc
138138
eval SHOW CREATE TABLE $table;
139139
--replace_column 1 ID 3 HOST_NAME 6 TIME
140+
--sorted_result
140141
eval SHOW $table;
141142
--replace_column 1 ID 3 HOST_NAME 6 TIME
142143
eval SELECT * FROM $table $select_where ORDER BY id;
@@ -181,8 +182,10 @@ GRANT PROCESS ON *.* TO ddicttestuser1@'localhost' IDENTIFIED BY 'ddictpass';
181182
connection con100;
182183
SHOW GRANTS;
183184
--replace_column 1 ID 3 HOST_NAME 6 TIME
185+
--sorted_result
184186
SHOW processlist;
185187
--replace_column 1 ID 3 HOST_NAME 6 TIME
188+
--sorted_result
186189
SELECT * FROM information_schema.processlist;
187190
--real_sleep 0.3
188191

@@ -193,8 +196,10 @@ SELECT * FROM information_schema.processlist;
193196
connect (con101,localhost,ddicttestuser1,ddictpass,information_schema);
194197
SHOW GRANTS;
195198
--replace_column 1 ID 3 HOST_NAME 6 TIME
199+
--sorted_result
196200
SHOW processlist;
197201
--replace_column 1 ID 3 HOST_NAME 6 TIME
202+
--sorted_result
198203
SELECT * FROM information_schema.processlist;
199204
--real_sleep 0.3
200205

@@ -215,8 +220,10 @@ GRANT PROCESS ON *.* TO ''@'localhost';
215220
connect (anonymous1,localhost,"''",,information_schema);
216221
SHOW GRANTS;
217222
--replace_column 1 ID 3 HOST_NAME 6 TIME
223+
--sorted_result
218224
SHOW processlist;
219225
--replace_column 1 ID 3 HOST_NAME 6 TIME
226+
--sorted_result
220227
SELECT * FROM information_schema.processlist;
221228
--real_sleep 0.3
222229

@@ -237,8 +244,10 @@ connect (con102,localhost,ddicttestuser1,ddictpass,information_schema);
237244
--echo ####################################################################################
238245
SHOW GRANTS;
239246
--replace_column 1 ID 3 HOST_NAME 6 TIME
247+
--sorted_result
240248
SHOW processlist;
241249
--replace_column 1 ID 3 HOST_NAME 6 TIME
250+
--sorted_result
242251
SELECT * FROM information_schema.processlist;
243252
--real_sleep 0.3
244253

@@ -262,9 +271,11 @@ if ($fixed_bug_30395)
262271
{
263272
# Bug#30395 strange results after REVOKE PROCESS ON *.* FROM ...
264273
--replace_column 1 ID 3 HOST_NAME 6 TIME
274+
--sorted_result
265275
SHOW processlist;
266276
}
267277
--replace_column 1 ID 3 HOST_NAME 6 TIME
278+
--sorted_result
268279
SELECT * FROM information_schema.processlist;
269280
--real_sleep 0.3
270281

@@ -284,8 +295,10 @@ connect (con103,localhost,ddicttestuser1,ddictpass,information_schema);
284295
--echo ####################################################################################
285296
SHOW GRANTS FOR 'ddicttestuser1'@'localhost';
286297
--replace_column 1 ID 3 HOST_NAME 6 TIME
298+
--sorted_result
287299
SHOW processlist;
288300
--replace_column 1 ID 3 HOST_NAME 6 TIME
301+
--sorted_result
289302
SELECT * FROM information_schema.processlist;
290303
--real_sleep 0.3
291304

@@ -306,8 +319,10 @@ connect (con104,localhost,ddicttestuser1,ddictpass,information_schema);
306319
--echo ####################################################################################
307320
SHOW GRANTS FOR 'ddicttestuser1'@'localhost';
308321
--replace_column 1 ID 3 HOST_NAME 6 TIME
322+
--sorted_result
309323
SHOW processlist;
310324
--replace_column 1 ID 3 HOST_NAME 6 TIME
325+
--sorted_result
311326
SELECT * FROM information_schema.processlist;
312327
--real_sleep 0.3
313328

@@ -353,8 +368,10 @@ connect (con200,localhost,ddicttestuser2,ddictpass,information_schema);
353368
--echo ####################################################################################
354369
SHOW GRANTS FOR 'ddicttestuser2'@'localhost';
355370
--replace_column 1 ID 3 HOST_NAME 6 TIME
371+
--sorted_result
356372
SHOW processlist;
357373
--replace_column 1 ID 3 HOST_NAME 6 TIME
374+
--sorted_result
358375
SELECT * FROM information_schema.processlist;
359376
--real_sleep 0.3
360377

@@ -374,8 +391,10 @@ connect (con201,localhost,ddicttestuser2,ddictpass,information_schema);
374391
--echo ####################################################################################
375392
SHOW GRANTS;
376393
--replace_column 1 ID 3 HOST_NAME 6 TIME
394+
--sorted_result
377395
SHOW processlist;
378396
--replace_column 1 ID 3 HOST_NAME 6 TIME
397+
--sorted_result
379398
SELECT * FROM information_schema.processlist;
380399
--real_sleep 0.3
381400

@@ -397,8 +416,10 @@ SHOW GRANTS FOR 'ddicttestuser1'@'localhost';
397416
--error ER_ACCESS_DENIED_ERROR
398417
GRANT PROCESS ON *.* TO 'ddicttestuser2'@'localhost';
399418
--replace_column 1 ID 3 HOST_NAME 6 TIME
419+
--sorted_result
400420
SHOW processlist;
401421
--replace_column 1 ID 3 HOST_NAME 6 TIME
422+
--sorted_result
402423
SELECT * FROM information_schema.processlist;
403424
--real_sleep 0.3
404425

@@ -421,8 +442,10 @@ connect (con108,localhost,ddicttestuser1,ddictpass,information_schema);
421442
--echo ####################################################################################
422443
SHOW GRANTS FOR 'ddicttestuser1'@'localhost';
423444
--replace_column 1 ID 3 HOST_NAME 6 TIME
445+
--sorted_result
424446
SHOW processlist;
425447
--replace_column 1 ID 3 HOST_NAME 6 TIME
448+
--sorted_result
426449
SELECT * FROM information_schema.processlist;
427450
--real_sleep 0.3
428451

mysql-test/suite/funcs_1/datadict/processlist_val.inc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,10 @@ echo
9393
#
9494
# 1. Just dump what we get
9595
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
96+
--sorted_result
9697
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
9798
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
99+
--sorted_result
98100
SHOW FULL PROCESSLIST;
99101
#
100102
# Determine the connection id of the current connection (default)
@@ -166,8 +168,10 @@ let $wait_condition= SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
166168
--source include/wait_condition.inc
167169
# 1. Just dump what we get
168170
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
171+
--sorted_result
169172
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
170173
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
174+
--sorted_result
171175
SHOW FULL PROCESSLIST;
172176
#
173177
# Pull ID and TIME of the second connection
@@ -211,8 +215,10 @@ echo
211215
;
212216
connection con1;
213217
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
218+
--sorted_result
214219
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
215220
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
221+
--sorted_result
216222
SHOW FULL PROCESSLIST;
217223

218224

@@ -245,8 +251,10 @@ echo
245251
connection con2;
246252
# Just dump what we get
247253
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
254+
--sorted_result
248255
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
249256
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
257+
--sorted_result
250258
SHOW FULL PROCESSLIST;
251259
#
252260
echo
@@ -305,8 +313,10 @@ WHERE ID = @test_user_con2_id AND Command IN('Query','Execute')
305313
--source include/wait_condition.inc
306314
# 1. Just dump what we get
307315
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
316+
--sorted_result
308317
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
309318
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
319+
--sorted_result
310320
SHOW FULL PROCESSLIST;
311321
#
312322
# Pull some information about the connection con2
@@ -376,6 +386,7 @@ let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
376386
# Expect to see the state 'Waiting for table metadata lock' for the third
377387
# connection because the SELECT collides with the WRITE TABLE LOCK.
378388
--replace_column 1 <ID> 3 <HOST_NAME> 6 <TIME>
389+
--sorted_result
379390
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
380391
UNLOCK TABLES;
381392
#
@@ -435,10 +446,13 @@ echo
435446
# SHOW PROCESSLIST statement truncated after 100 char
436447
;
437448
--replace_column 1 <ID> 3 <HOST_NAME> 5 <COMMAND> 6 <TIME> 7 <STATE>
449+
--sorted_result
438450
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
439451
--replace_column 1 <ID> 3 <HOST_NAME> 5 <COMMAND> 6 <TIME> 7 <STATE>
452+
--sorted_result
440453
SHOW FULL PROCESSLIST;
441454
--replace_column 1 <ID> 3 <HOST_NAME> 5 <COMMAND> 6 <TIME> 7 <STATE>
455+
--sorted_result
442456
SHOW PROCESSLIST;
443457
UNLOCK TABLES;
444458
echo

0 commit comments

Comments
 (0)