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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
ee3b6340
Commit
ee3b6340
authored
Oct 05, 2004
by
hf@deer.(none)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix for #5730 (Query cache crashes server)
Recusive part leads to stack overflow
parent
19c112df
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
38 deletions
+37
-38
sql/sql_cache.cc
sql/sql_cache.cc
+37
-38
No files found.
sql/sql_cache.cc
View file @
ee3b6340
...
...
@@ -1843,7 +1843,6 @@ inline ulong Query_cache::get_min_append_result_data_size()
/*
Allocate one or more blocks to hold data
*/
my_bool
Query_cache
::
allocate_data_chain
(
Query_cache_block
**
result_block
,
ulong
data_len
,
Query_cache_block
*
query_block
,
...
...
@@ -1851,55 +1850,55 @@ my_bool Query_cache::allocate_data_chain(Query_cache_block **result_block,
{
ulong
all_headers_len
=
(
ALIGN_SIZE
(
sizeof
(
Query_cache_block
))
+
ALIGN_SIZE
(
sizeof
(
Query_cache_result
)));
ulong
len
=
data_len
+
all_headers_len
;
ulong
align_len
=
ALIGN_SIZE
(
len
);
DBUG_ENTER
(
"Query_cache::allocate_data_chain"
);
DBUG_PRINT
(
"qcache"
,
(
"data_len %lu, all_headers_len %lu"
,
data_len
,
all_headers_len
));
ulong
min_size
=
(
first_block_arg
?
get_min_first_result_data_size
()
:
get_min_append_result_data_size
());
*
result_block
=
allocate_block
(
max
(
min_size
,
align_len
),
min_result_data_size
==
0
,
all_headers_len
+
min_result_data_size
,
1
);
my_bool
success
=
(
*
result_block
!=
0
);
if
(
success
)
Query_cache_block
*
prev_block
=
NULL
;
Query_cache_block
*
new_block
;
DBUG_ENTER
(
"Query_cache::allocate_data_chain"
);
DBUG_PRINT
(
"qcache"
,
(
"data_len %lu, all_headers_len %lu"
,
data_len
,
all_headers_len
));
do
{
Query_cache_block
*
new_block
=
*
result_block
;
ulong
len
=
data_len
+
all_headers_len
;
ulong
align_len
=
ALIGN_SIZE
(
len
);
if
(
!
(
new_block
=
allocate_block
(
max
(
min_size
,
align_len
),
min_result_data_size
==
0
,
all_headers_len
+
min_result_data_size
,
1
)))
{
DBUG_PRINT
(
"warning"
,
(
"Can't allocate block for results"
));
DBUG_RETURN
(
FALSE
);
}
new_block
->
n_tables
=
0
;
new_block
->
used
=
0
;
new_block
->
used
=
min
(
len
,
new_block
->
length
)
;
new_block
->
type
=
Query_cache_block
::
RES_INCOMPLETE
;
new_block
->
next
=
new_block
->
prev
=
new_block
;
Query_cache_result
*
header
=
new_block
->
result
();
header
->
parent
(
query_block
);
if
(
new_block
->
length
<
len
)
{
/*
We got less memory then we need (no big memory blocks) =>
Continue to allocated more blocks until we got everything we need.
*/
Query_cache_block
*
next_block
;
if
((
success
=
allocate_data_chain
(
&
next_block
,
len
-
new_block
->
length
,
query_block
,
first_block_arg
)))
double_linked_list_join
(
new_block
,
next_block
);
}
if
(
success
)
{
new_block
->
used
=
min
(
len
,
new_block
->
length
);
DBUG_PRINT
(
"qcache"
,
(
"Block len %lu used %lu"
,
DBUG_PRINT
(
"qcache"
,
(
"Block len %lu used %lu"
,
new_block
->
length
,
new_block
->
used
));
}
if
(
prev_block
)
double_linked_list_join
(
prev_block
,
new_block
);
else
DBUG_PRINT
(
"warning"
,
(
"Can't allocate block for continue"
));
}
else
DBUG_PRINT
(
"warning"
,
(
"Can't allocate block for results"
));
DBUG_RETURN
(
success
);
*
result_block
=
new_block
;
if
(
new_block
->
length
>=
len
)
break
;
/*
We got less memory then we need (no big memory blocks) =>
Continue to allocated more blocks until we got everything we need.
*/
data_len
=
len
-
new_block
->
length
;
prev_block
=
new_block
;
}
while
(
1
);
DBUG_RETURN
(
TRUE
);
}
/*****************************************************************************
...
...
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