Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
827b954e
Commit
827b954e
authored
9 years ago
by
Jeff Hostetler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reserve aux_id 0; sort leaks by aux_id. Fix cmp.
parent
93b42728
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
6 deletions
+24
-6
src/win32/w32_stack.c
+15
-3
src/win32/w32_stack.h
+9
-3
No files found.
src/win32/w32_stack.c
View file @
827b954e
...
...
@@ -76,7 +76,7 @@ int git_win32__stack_compare(
git_win32__stack__raw_data
*
d1
,
git_win32__stack__raw_data
*
d2
)
{
return
memcmp
(
d1
,
d2
,
sizeof
(
d1
));
return
memcmp
(
d1
,
d2
,
sizeof
(
*
d1
));
}
int
git_win32__stack_format
(
...
...
@@ -88,7 +88,6 @@ int git_win32__stack_format(
/* SYMBOL_INFO has char FileName[1] at the end. The docs say to
* to malloc it with extra space for your desired max filename.
* We use a union to do the same thing without mallocing.
*/
struct
{
SYMBOL_INFO
symbol
;
...
...
@@ -152,12 +151,25 @@ int git_win32__stack_format(
buf_used
+=
detail_len
;
}
/* If an "aux" data provider was registered, ask it to append its detailed
/* "aux_id" 0 is reserved to mean no aux data. This is needed to handle
* allocs that occur before the aux callbacks were registered.
*/
if
(
pdata
->
aux_id
>
0
)
{
p_snprintf
(
detail
,
sizeof
(
detail
),
"%saux_id: %d%s"
,
prefix
,
pdata
->
aux_id
,
suffix
);
detail_len
=
strlen
(
detail
);
if
((
buf_used
+
detail_len
+
1
)
<
buf_len
)
{
memcpy
(
&
pbuf
[
buf_used
],
detail
,
detail_len
);
buf_used
+=
detail_len
;
}
/* If an "aux" data provider is still registered, ask it to append its detailed
* data to the end of ours using the "aux_id" it gave us when this de-duped
* item was created.
*/
if
(
g_aux_cb_lookup
)
(
g_aux_cb_lookup
)(
pdata
->
aux_id
,
&
pbuf
[
buf_used
],
(
buf_len
-
buf_used
-
1
));
}
return
GIT_OK
;
}
...
...
This diff is collapsed.
Click to expand it.
src/win32/w32_stack.h
View file @
827b954e
...
...
@@ -19,7 +19,8 @@
* This callback will be called during crtdbg-instrumented allocs.
*
* @param aux_id [out] A returned "aux_id" representing a unique
* (de-duped at the C# layer) stacktrace.
* (de-duped at the C# layer) stacktrace. "aux_id" 0 is reserved
* to mean no aux stacktrace data.
*/
typedef
void
(
*
git_win32__stack__aux_cb_alloc
)(
unsigned
int
*
aux_id
);
...
...
@@ -60,11 +61,16 @@ GIT_EXTERN(int) git_win32__stack__set_aux_cb(
/**
* Wrapper containing the raw unprocessed stackframe
* data for a single stacktrace and any "aux_id".
*
* I put the aux_id first so leaks will be sorted by it.
* So, for example, if a specific callstack in C# leaks
* a repo handle, all of the pointers within the associated
* repo pointer will be grouped together.
*/
typedef
struct
{
void
*
frames
[
GIT_WIN32__STACK__MAX_FRAMES
];
unsigned
int
nr_frames
;
unsigned
int
aux_id
;
unsigned
int
nr_frames
;
void
*
frames
[
GIT_WIN32__STACK__MAX_FRAMES
];
}
git_win32__stack__raw_data
;
...
...
This diff is collapsed.
Click to expand it.
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