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
Jun 28, 2015
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
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
28 additions
and
10 deletions
+28
-10
src/win32/w32_stack.c
+19
-7
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
* data to the end of ours using the "aux_id" it gave us when this de-duped
* item was created.
/* "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
(
g_aux_cb_lookup
)
(
g_aux_cb_lookup
)(
pdata
->
aux_id
,
&
pbuf
[
buf_used
],
(
buf_len
-
buf_used
-
1
));
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
;
}
...
...
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
;
...
...
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