Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
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
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
f43f9676
Commit
f43f9676
authored
Feb 01, 2023
by
Gabriel Ivăncescu
Committed by
Alexandre Julliard
Feb 01, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Traverse and unlink builtin func disps.
Signed-off-by:
Gabriel Ivăncescu
<
gabrielopcode@gmail.com
>
parent
fa63e870
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
1 deletion
+26
-1
dispex.c
dlls/mshtml/dispex.c
+26
-1
No files found.
dlls/mshtml/dispex.c
View file @
f43f9676
...
...
@@ -2003,7 +2003,17 @@ void dispex_traverse(DispatchEx *This, nsCycleCollectionTraversalCallback *cb)
note_cc_edge
((
nsISupports
*
)
V_DISPATCH
(
&
prop
->
var
),
"dispex_data"
,
cb
);
}
/* FIXME: Traverse func_disps */
if
(
This
->
dynamic_data
->
func_disps
)
{
func_obj_entry_t
*
iter
=
This
->
dynamic_data
->
func_disps
,
*
end
=
iter
+
This
->
info
->
func_disp_cnt
;
for
(
iter
=
This
->
dynamic_data
->
func_disps
;
iter
<
end
;
iter
++
)
{
if
(
!
iter
->
func_obj
)
continue
;
note_cc_edge
((
nsISupports
*
)
&
iter
->
func_obj
->
dispex
.
IDispatchEx_iface
,
"func_obj"
,
cb
);
if
(
V_VT
(
&
iter
->
val
)
==
VT_DISPATCH
)
note_cc_edge
((
nsISupports
*
)
V_DISPATCH
(
&
iter
->
val
),
"func_val"
,
cb
);
}
}
}
void
dispex_unlink
(
DispatchEx
*
This
)
...
...
@@ -2021,6 +2031,21 @@ void dispex_unlink(DispatchEx *This)
VariantClear
(
&
prop
->
var
);
}
}
if
(
This
->
dynamic_data
->
func_disps
)
{
func_obj_entry_t
*
iter
=
This
->
dynamic_data
->
func_disps
,
*
end
=
iter
+
This
->
info
->
func_disp_cnt
;
for
(
iter
=
This
->
dynamic_data
->
func_disps
;
iter
<
end
;
iter
++
)
{
if
(
!
iter
->
func_obj
)
continue
;
iter
->
func_obj
->
obj
=
NULL
;
IDispatchEx_Release
(
&
iter
->
func_obj
->
dispex
.
IDispatchEx_iface
);
VariantClear
(
&
iter
->
val
);
}
free
(
This
->
dynamic_data
->
func_disps
);
This
->
dynamic_data
->
func_disps
=
NULL
;
}
}
const
void
*
dispex_get_vtbl
(
DispatchEx
*
dispex
)
...
...
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