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
604aa2b4
Commit
604aa2b4
authored
Oct 28, 2015
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
preparser: abort ongoing input thread at exit (fixes #14571)
parent
ff384dc7
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
9 deletions
+14
-9
src/playlist/preparser.c
src/playlist/preparser.c
+14
-9
No files found.
src/playlist/preparser.c
View file @
604aa2b4
...
@@ -49,6 +49,7 @@ struct playlist_preparser_t
...
@@ -49,6 +49,7 @@ struct playlist_preparser_t
vlc_mutex_t
lock
;
vlc_mutex_t
lock
;
vlc_cond_t
wait
;
vlc_cond_t
wait
;
vlc_sem_t
item_done
;
bool
b_live
;
bool
b_live
;
preparser_entry_t
**
pp_waiting
;
preparser_entry_t
**
pp_waiting
;
int
i_waiting
;
int
i_waiting
;
...
@@ -72,6 +73,7 @@ playlist_preparser_t *playlist_preparser_New( vlc_object_t *parent )
...
@@ -72,6 +73,7 @@ playlist_preparser_t *playlist_preparser_New( vlc_object_t *parent )
vlc_mutex_init
(
&
p_preparser
->
lock
);
vlc_mutex_init
(
&
p_preparser
->
lock
);
vlc_cond_init
(
&
p_preparser
->
wait
);
vlc_cond_init
(
&
p_preparser
->
wait
);
vlc_sem_init
(
&
p_preparser
->
item_done
,
0
);
p_preparser
->
b_live
=
false
;
p_preparser
->
b_live
=
false
;
p_preparser
->
i_waiting
=
0
;
p_preparser
->
i_waiting
=
0
;
p_preparser
->
pp_waiting
=
NULL
;
p_preparser
->
pp_waiting
=
NULL
;
...
@@ -123,11 +125,14 @@ void playlist_preparser_Delete( playlist_preparser_t *p_preparser )
...
@@ -123,11 +125,14 @@ void playlist_preparser_Delete( playlist_preparser_t *p_preparser )
REMOVE_ELEM
(
p_preparser
->
pp_waiting
,
p_preparser
->
i_waiting
,
0
);
REMOVE_ELEM
(
p_preparser
->
pp_waiting
,
p_preparser
->
i_waiting
,
0
);
}
}
vlc_sem_post
(
&
p_preparser
->
item_done
);
while
(
p_preparser
->
b_live
)
while
(
p_preparser
->
b_live
)
vlc_cond_wait
(
&
p_preparser
->
wait
,
&
p_preparser
->
lock
);
vlc_cond_wait
(
&
p_preparser
->
wait
,
&
p_preparser
->
lock
);
vlc_mutex_unlock
(
&
p_preparser
->
lock
);
vlc_mutex_unlock
(
&
p_preparser
->
lock
);
/* Destroy the item preparser */
/* Destroy the item preparser */
vlc_sem_destroy
(
&
p_preparser
->
item_done
);
vlc_cond_destroy
(
&
p_preparser
->
wait
);
vlc_cond_destroy
(
&
p_preparser
->
wait
);
vlc_mutex_destroy
(
&
p_preparser
->
lock
);
vlc_mutex_destroy
(
&
p_preparser
->
lock
);
...
@@ -183,16 +188,16 @@ static void Preparse( playlist_preparser_t *preparser, input_item_t *p_item,
...
@@ -183,16 +188,16 @@ static void Preparse( playlist_preparser_t *preparser, input_item_t *p_item,
if
(
input
==
NULL
)
if
(
input
==
NULL
)
return
;
return
;
vlc_sem_t
done
;
var_AddCallback
(
input
,
"intf-event"
,
InputEvent
,
&
preparser
->
item_done
);
vlc_sem_init
(
&
done
,
0
);
var_AddCallback
(
input
,
"intf-event"
,
InputEvent
,
&
done
);
if
(
input_Start
(
input
)
==
VLC_SUCCESS
)
if
(
input_Start
(
input
)
==
VLC_SUCCESS
)
vlc_sem_wait
(
&
done
);
vlc_sem_wait
(
&
preparser
->
item_done
);
var_DelCallback
(
input
,
"intf-event"
,
InputEvent
,
var_DelCallback
(
input
,
"intf-event"
,
InputEvent
,
&
done
);
&
preparser
->
item_done
);
vlc_sem_destroy
(
&
done
);
/* Normally, the input is already stopped since we waited for it. But
* if the playlist preparser is being deleted, then the input might
* still be running. Force it to stop. */
input_Stop
(
input
);
input_Close
(
input
);
input_Close
(
input
);
var_SetAddress
(
preparser
->
object
,
"item-change"
,
p_item
);
var_SetAddress
(
preparser
->
object
,
"item-change"
,
p_item
);
...
...
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