Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
cc2f0cb6
Commit
cc2f0cb6
authored
Jun 22, 2008
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix deadlock in vlc_object_kill (should fix #1543)
parent
6059d32e
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
13 additions
and
9 deletions
+13
-9
src/misc/objects.c
src/misc/objects.c
+13
-9
No files found.
src/misc/objects.c
View file @
cc2f0cb6
...
@@ -606,16 +606,16 @@ void __vlc_object_signal_unlocked( vlc_object_t *obj )
...
@@ -606,16 +606,16 @@ void __vlc_object_signal_unlocked( vlc_object_t *obj )
*/
*/
void
__vlc_object_kill
(
vlc_object_t
*
p_this
)
void
__vlc_object_kill
(
vlc_object_t
*
p_this
)
{
{
vlc_object_internals_t
*
internals
=
vlc_internals
(
p_this
);
vlc_object_internals_t
*
priv
=
vlc_internals
(
p_this
);
int
fd
;
int
fd
;
vlc_object_lock
(
p_this
);
vlc_object_lock
(
p_this
);
p_this
->
b_die
=
true
;
p_this
->
b_die
=
true
;
vlc_spin_lock
(
&
internals
->
spin
);
vlc_spin_lock
(
&
priv
->
spin
);
fd
=
internals
->
pipes
[
1
];
fd
=
priv
->
pipes
[
1
];
internals
->
pipes
[
1
]
=
-
1
;
priv
->
pipes
[
1
]
=
-
1
;
vlc_spin_unlock
(
&
internals
->
spin
);
vlc_spin_unlock
(
&
priv
->
spin
);
if
(
fd
!=
-
1
)
if
(
fd
!=
-
1
)
{
{
...
@@ -628,10 +628,14 @@ void __vlc_object_kill( vlc_object_t *p_this )
...
@@ -628,10 +628,14 @@ void __vlc_object_kill( vlc_object_t *p_this )
if
(
p_this
->
i_object_type
==
VLC_OBJECT_LIBVLC
)
if
(
p_this
->
i_object_type
==
VLC_OBJECT_LIBVLC
)
{
{
vlc_list_t
*
children
=
vlc_list_children
(
p_this
);
/* Do not use vlc_list_children() here! We don't want to yield/release
for
(
int
i
=
0
;
i
<
children
->
i_count
;
i
++
)
* all the children of LibVLC (-> dead lock). This is a hack anyway:
vlc_object_kill
(
children
->
p_values
[
i
].
p_object
);
* LibVLC should kill its children by itself as it sees fit, as any
vlc_list_release
(
children
);
* other object. */
vlc_mutex_lock
(
&
structure_lock
);
for
(
int
i
=
0
;
i
<
priv
->
i_children
;
i
++
)
vlc_object_kill
(
priv
->
pp_children
[
i
]);
vlc_mutex_unlock
(
&
structure_lock
);
}
}
}
}
...
...
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