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
909247a9
Commit
909247a9
authored
Aug 24, 2005
by
serg@sergbook.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
memroot: trash the memory in free_root()
parent
1fbb96ea
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
1 deletion
+14
-1
mysys/my_alloc.c
mysys/my_alloc.c
+14
-1
No files found.
mysys/my_alloc.c
View file @
909247a9
...
...
@@ -203,7 +203,7 @@ gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size)
next
->
left
=
get_size
-
ALIGN_SIZE
(
sizeof
(
USED_MEM
));
*
prev
=
next
;
}
point
=
(
gptr
)
((
char
*
)
next
+
(
next
->
size
-
next
->
left
));
/*TODO: next part may be unneded due to mem_root->first_block_usage counter*/
if
((
next
->
left
-=
Size
)
<
mem_root
->
min_malloc
)
...
...
@@ -217,6 +217,12 @@ gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size)
#endif
}
#ifdef SAFEMALLOC
#define TRASH(X) bfill(((char*)(X) + ((X)->size-(X)->left)), (X)->left, 0xa5)
#else
#define TRASH
/* no-op */
#endif
/* Mark all data in blocks free for reusage */
static
inline
void
mark_blocks_free
(
MEM_ROOT
*
root
)
...
...
@@ -227,14 +233,20 @@ static inline void mark_blocks_free(MEM_ROOT* root)
/* iterate through (partially) free blocks, mark them free */
last
=
&
root
->
free
;
for
(
next
=
root
->
free
;
next
;
next
=
*
(
last
=
&
next
->
next
))
{
next
->
left
=
next
->
size
-
ALIGN_SIZE
(
sizeof
(
USED_MEM
));
TRASH
(
next
);
}
/* Combine the free and the used list */
*
last
=
next
=
root
->
used
;
/* now go through the used blocks and mark them free */
for
(;
next
;
next
=
next
->
next
)
{
next
->
left
=
next
->
size
-
ALIGN_SIZE
(
sizeof
(
USED_MEM
));
TRASH
(
next
);
}
/* Now everything is set; Indicate that nothing is used anymore */
root
->
used
=
0
;
...
...
@@ -280,6 +292,7 @@ void free_root(MEM_ROOT *root, myf MyFlags)
{
root
->
free
=
root
->
pre_alloc
;
root
->
free
->
left
=
root
->
pre_alloc
->
size
-
ALIGN_SIZE
(
sizeof
(
USED_MEM
));
TRASH
(
root
->
pre_alloc
);
root
->
free
->
next
=
0
;
}
root
->
block_num
=
4
;
...
...
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