Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
53d7c306
Commit
53d7c306
authored
Nov 29, 2000
by
monty@donna.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New vio file
parent
08a2c58e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
246 additions
and
0 deletions
+246
-0
div/deadlock_test.c
div/deadlock_test.c
+238
-0
vio/docs/CodingStyle
vio/docs/CodingStyle
+8
-0
No files found.
div/deadlock_test.c
0 → 100644
View file @
53d7c306
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include <mysql.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef
unsigned
char
uchar
;
static
void
die
(
char
*
fmt
,
...);
static
void
safe_query
(
MYSQL
*
mysql
,
char
*
query
,
int
read_ok
);
static
void
run_query_batch
(
int
*
order
,
int
num_queries
);
static
void
permute
(
int
*
order
,
int
num_queries
);
static
void
permute_aux
(
int
*
order
,
int
num_queries
,
int
*
fixed
);
static
void
dump_result
(
MYSQL
*
mysql
,
char
*
query
);
int
count
=
0
;
struct
query
{
MYSQL
*
mysql
;
char
*
query
;
int
read_ok
;
int
pri
;
int
dump_result
;
};
MYSQL
lock
,
sel
,
del_ins
;
struct
query
queries
[]
=
{
{
&
del_ins
,
"insert delayed into foo values(1)"
,
1
,
0
,
0
},
{
&
del_ins
,
"insert delayed into foo values(1)"
,
1
,
0
,
0
},
{
&
lock
,
"lock tables foo write"
,
1
,
1
,
0
},
{
&
lock
,
"unlock tables"
,
1
,
2
,
0
},
{
&
sel
,
"select * from foo"
,
0
,
0
,
0
},
{
&
del_ins
,
"insert into foo values(4)"
,
0
,
3
,
0
},
{
0
,
0
,
0
}
};
static
void
die
(
char
*
fmt
,
...)
{
va_list
args
;
va_start
(
args
,
fmt
);
fprintf
(
stderr
,
"ERROR: "
);
vfprintf
(
stderr
,
fmt
,
args
);
fprintf
(
stderr
,
"
\n
"
);
va_end
(
args
);
exit
(
1
);
}
static
void
permute
(
int
*
order
,
int
num_queries
)
{
int
*
fixed
;
if
(
num_queries
<
2
)
return
;
if
(
!
(
fixed
=
(
int
*
)
malloc
(
num_queries
*
sizeof
(
int
))))
die
(
"malloc() failed"
);
memset
(
fixed
,
0
,
num_queries
*
sizeof
(
int
));
permute_aux
(
order
,
num_queries
,
fixed
);
free
(
fixed
);
}
static
order_ok
(
int
*
order
,
int
num_queries
)
{
int
i
,
j
,
pri_i
,
pri_j
;
for
(
i
=
0
;
i
<
num_queries
;
i
++
)
{
if
((
pri_i
=
queries
[
order
[
i
]].
pri
))
for
(
j
=
i
+
1
;
j
<
num_queries
;
j
++
)
{
pri_j
=
queries
[
order
[
j
]].
pri
;
if
(
pri_j
&&
pri_i
>
pri_j
)
return
0
;
}
}
return
1
;
}
static
void
permute_aux
(
int
*
order
,
int
num_queries
,
int
*
fixed
)
{
int
*
p
,
*
p1
,
j
,
i
,
tmp
,
num_free
=
0
;
p
=
fixed
;
for
(
i
=
0
;
i
<
num_queries
;
i
++
,
p
++
)
{
if
(
!*
p
)
{
num_free
++
;
*
p
=
1
;
for
(
j
=
0
,
p1
=
fixed
;
j
<
num_queries
;
j
++
,
p1
++
)
{
if
(
!*
p1
)
{
tmp
=
order
[
i
];
order
[
i
]
=
order
[
j
];
order
[
j
]
=
tmp
;
*
p1
=
1
;
permute_aux
(
order
,
num_queries
,
fixed
);
tmp
=
order
[
i
];
order
[
i
]
=
order
[
j
];
order
[
j
]
=
tmp
;
*
p1
=
0
;
}
}
*
p
=
0
;
}
}
//printf("num_free = %d\n", num_free);
if
(
num_free
<=
1
)
{
count
++
;
if
(
order_ok
(
order
,
num_queries
))
run_query_batch
(
order
,
num_queries
);
}
}
static
void
run_query_batch
(
int
*
order
,
int
num_queries
)
{
int
i
;
struct
query
*
q
;
int
*
save_order
;
safe_query
(
&
lock
,
"delete from foo"
,
1
);
save_order
=
order
;
for
(
i
=
0
;
i
<
num_queries
;
i
++
,
order
++
)
{
q
=
queries
+
*
order
;
printf
(
"query='%s'
\n
"
,
q
->
query
);
safe_query
(
q
->
mysql
,
q
->
query
,
q
->
read_ok
);
}
order
=
save_order
;
for
(
i
=
0
;
i
<
num_queries
;
i
++
,
order
++
)
{
q
=
queries
+
*
order
;
if
(
q
->
dump_result
)
dump_result
(
q
->
mysql
,
q
->
query
);
}
printf
(
"
\n
"
);
}
static
void
safe_net_read
(
NET
*
net
,
char
*
query
)
{
int
len
;
len
=
my_net_read
(
net
);
if
(
len
==
packet_error
||
!
len
)
die
(
"Error running query '%s'"
,
query
);
if
(
net
->
read_pos
[
0
]
==
255
)
die
(
"Error running query '%s'"
,
query
);
}
static
void
safe_query
(
MYSQL
*
mysql
,
char
*
query
,
int
read_ok
)
{
int
len
;
NET
*
net
=
&
mysql
->
net
;
net_clear
(
net
);
if
(
net_write_command
(
net
,(
uchar
)
COM_QUERY
,
query
,
strlen
(
query
)))
die
(
"Error running query '%s': %s"
,
query
,
mysql_error
(
mysql
));
if
(
read_ok
)
{
safe_net_read
(
net
,
query
);
}
}
static
void
dump_result
(
MYSQL
*
mysql
,
char
*
query
)
{
MYSQL_RES
*
res
;
safe_net_read
(
&
mysql
->
net
,
query
);
res
=
mysql_store_result
(
mysql
);
if
(
res
)
mysql_free_result
(
res
);
}
static
int
*
init_order
(
int
*
num_queries
)
{
struct
query
*
q
;
int
*
order
,
*
order_end
,
*
p
;
int
n
,
i
;
for
(
q
=
queries
;
q
->
mysql
;
q
++
)
;
n
=
q
-
queries
;
if
(
!
(
order
=
(
int
*
)
malloc
(
n
*
sizeof
(
int
))))
die
(
"malloc() failed"
);
order_end
=
order
+
n
;
for
(
p
=
order
,
i
=
0
;
p
<
order_end
;
p
++
,
i
++
)
*
p
=
i
;
*
num_queries
=
n
;
return
order
;
}
int
main
()
{
char
*
user
=
"root"
,
*
pass
=
""
,
*
host
=
"localhost"
,
*
db
=
"test"
;
int
*
order
,
num_queries
;
order
=
init_order
(
&
num_queries
);
if
(
!
mysql_init
(
&
lock
)
||
!
mysql_init
(
&
sel
)
||
!
mysql_init
(
&
del_ins
))
die
(
"error in mysql_init()"
);
mysql_options
(
&
lock
,
MYSQL_READ_DEFAULT_GROUP
,
"mysql"
);
mysql_options
(
&
sel
,
MYSQL_READ_DEFAULT_GROUP
,
"mysql"
);
mysql_options
(
&
del_ins
,
MYSQL_READ_DEFAULT_GROUP
,
"mysql"
);
if
(
!
mysql_real_connect
(
&
lock
,
host
,
user
,
pass
,
db
,
0
,
0
,
0
)
||
!
mysql_real_connect
(
&
sel
,
host
,
user
,
pass
,
db
,
0
,
0
,
0
)
||
!
mysql_real_connect
(
&
del_ins
,
host
,
user
,
pass
,
db
,
0
,
0
,
0
))
die
(
"Error in mysql_real_connect(): %s"
,
mysql_error
(
&
lock
));
permute
(
order
,
num_queries
);
printf
(
"count = %d
\n
"
,
count
);
mysql_close
(
&
lock
);
mysql_close
(
&
sel
);
mysql_close
(
&
del_ins
);
free
(
order
);
}
vio/docs/CodingStyle
0 → 100644
View file @
53d7c306
Roughly the same as "Linux Kernel Coding Style", which is
included in file LinuxKernelCodingStyle.
Some methods are meant to be used as set/get, for example, there
are:
virtual bool Vio::blocking();
virtual int Vio::blocking(bool block);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment