Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
a1066b72
Commit
a1066b72
authored
Dec 22, 2006
by
Clément Stenac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup control and parser threads handling. Might fix #917
parent
65d21833
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
51 additions
and
69 deletions
+51
-69
src/playlist/engine.c
src/playlist/engine.c
+29
-42
src/playlist/thread.c
src/playlist/thread.c
+22
-27
No files found.
src/playlist/engine.c
View file @
a1066b72
...
...
@@ -158,21 +158,6 @@ playlist_t * playlist_Create( vlc_object_t *p_parent )
void
playlist_Destroy
(
playlist_t
*
p_playlist
)
{
while
(
p_playlist
->
i_sds
)
{
playlist_ServicesDiscoveryRemove
(
p_playlist
,
p_playlist
->
pp_sds
[
0
]
->
psz_module
);
}
playlist_MLDump
(
p_playlist
);
vlc_thread_join
(
p_playlist
->
p_preparse
);
vlc_thread_join
(
p_playlist
->
p_fetcher
);
vlc_thread_join
(
p_playlist
);
vlc_object_detach
(
p_playlist
->
p_preparse
);
vlc_object_detach
(
p_playlist
->
p_fetcher
);
var_Destroy
(
p_playlist
,
"intf-change"
);
var_Destroy
(
p_playlist
,
"item-change"
);
var_Destroy
(
p_playlist
,
"playlist-current"
);
...
...
@@ -185,34 +170,7 @@ void playlist_Destroy( playlist_t *p_playlist )
var_Destroy
(
p_playlist
,
"loop"
);
var_Destroy
(
p_playlist
,
"activity"
);
PL_LOCK
;
/* Go through all items, and simply free everything without caring
* about the tree structure. Do not decref, it will be done by doing
* the same thing on the input items array */
FOREACH_ARRAY
(
playlist_item_t
*
p_del
,
p_playlist
->
all_items
)
free
(
p_del
->
pp_children
);
free
(
p_del
);
FOREACH_END
();
ARRAY_RESET
(
p_playlist
->
all_items
);
FOREACH_ARRAY
(
input_item_t
*
p_del
,
p_playlist
->
input_items
)
input_ItemClean
(
p_del
);
free
(
p_del
);
FOREACH_END
();
ARRAY_RESET
(
p_playlist
->
input_items
);
ARRAY_RESET
(
p_playlist
->
items
);
ARRAY_RESET
(
p_playlist
->
current
);
PL_UNLOCK
;
vlc_mutex_destroy
(
&
p_playlist
->
p_stats
->
lock
);
if
(
p_playlist
->
p_stats
)
free
(
p_playlist
->
p_stats
);
vlc_mutex_destroy
(
&
p_playlist
->
gc_lock
);
vlc_object_destroy
(
p_playlist
->
p_preparse
);
vlc_object_destroy
(
p_playlist
->
p_fetcher
);
vlc_object_detach
(
p_playlist
);
vlc_object_destroy
(
p_playlist
);
}
...
...
@@ -474,6 +432,35 @@ void playlist_LastLoop( playlist_t *p_playlist )
vlc_object_release
(
p_obj
);
vout_Destroy
(
(
vout_thread_t
*
)
p_obj
);
}
while
(
p_playlist
->
i_sds
)
{
playlist_ServicesDiscoveryRemove
(
p_playlist
,
p_playlist
->
pp_sds
[
0
]
->
psz_module
);
}
playlist_MLDump
(
p_playlist
);
PL_LOCK
;
/* Go through all items, and simply free everything without caring
* about the tree structure. Do not decref, it will be done by doing
* the same thing on the input items array */
FOREACH_ARRAY
(
playlist_item_t
*
p_del
,
p_playlist
->
all_items
)
free
(
p_del
->
pp_children
);
free
(
p_del
);
FOREACH_END
();
ARRAY_RESET
(
p_playlist
->
all_items
);
FOREACH_ARRAY
(
input_item_t
*
p_del
,
p_playlist
->
input_items
)
input_ItemClean
(
p_del
);
free
(
p_del
);
FOREACH_END
();
ARRAY_RESET
(
p_playlist
->
input_items
);
ARRAY_RESET
(
p_playlist
->
items
);
ARRAY_RESET
(
p_playlist
->
current
);
PL_UNLOCK
;
}
/** Main loop for preparser queue */
...
...
src/playlist/thread.c
View file @
a1066b72
...
...
@@ -36,10 +36,6 @@ static void RunControlThread ( playlist_t * );
static
void
RunPreparse
(
playlist_preparse_t
*
);
static
void
RunFetcher
(
playlist_fetcher_t
*
);
static
playlist_t
*
CreatePlaylist
(
vlc_object_t
*
p_parent
);
static
void
EndPlaylist
(
playlist_t
*
);
static
void
DestroyPlaylist
(
playlist_t
*
);
static
void
DestroyInteraction
(
playlist_t
*
);
/*****************************************************************************
...
...
@@ -57,9 +53,7 @@ static void DestroyInteraction( playlist_t * );
*/
void
__playlist_ThreadCreate
(
vlc_object_t
*
p_parent
)
{
playlist_t
*
p_playlist
;
p_playlist
=
CreatePlaylist
(
p_parent
);
playlist_t
*
p_playlist
=
playlist_Create
(
p_parent
);
if
(
!
p_playlist
)
return
;
// Stats
...
...
@@ -142,21 +136,41 @@ void __playlist_ThreadCreate( vlc_object_t *p_parent )
*/
int
playlist_ThreadDestroy
(
playlist_t
*
p_playlist
)
{
// Tell playlist to go to last loop
p_playlist
->
b_die
=
VLC_TRUE
;
playlist_Signal
(
p_playlist
);
// Kill preparser
if
(
p_playlist
->
p_preparse
)
{
vlc_cond_signal
(
&
p_playlist
->
p_preparse
->
object_wait
);
free
(
p_playlist
->
p_preparse
->
pp_waiting
);
}
vlc_thread_join
(
p_playlist
->
p_preparse
);
vlc_object_detach
(
p_playlist
->
p_preparse
);
vlc_object_destroy
(
p_playlist
->
p_preparse
);
// Kill meta fetcher
if
(
p_playlist
->
p_fetcher
)
{
vlc_cond_signal
(
&
p_playlist
->
p_fetcher
->
object_wait
);
free
(
p_playlist
->
p_fetcher
->
p_waiting
);
}
vlc_thread_join
(
p_playlist
->
p_fetcher
);
vlc_object_detach
(
p_playlist
->
p_fetcher
);
vlc_object_destroy
(
p_playlist
->
p_fetcher
);
// Wait for thread to complete
vlc_thread_join
(
p_playlist
);
// Stats
vlc_mutex_destroy
(
&
p_playlist
->
p_stats
->
lock
);
if
(
p_playlist
->
p_stats
)
free
(
p_playlist
->
p_stats
);
DestroyInteraction
(
p_playlist
);
DestroyPlaylist
(
p_playlist
);
playlist_Destroy
(
p_playlist
);
return
VLC_SUCCESS
;
}
...
...
@@ -192,25 +206,6 @@ static void RunControlThread ( playlist_t *p_playlist )
}
}
EndPlaylist
(
p_playlist
);
}
/*****************************************************************************
* Playlist-specific functions
*****************************************************************************/
static
playlist_t
*
CreatePlaylist
(
vlc_object_t
*
p_parent
)
{
return
playlist_Create
(
p_parent
);
}
static
void
DestroyPlaylist
(
playlist_t
*
p_playlist
)
{
playlist_Destroy
(
p_playlist
);
}
static
void
EndPlaylist
(
playlist_t
*
p_playlist
)
{
playlist_LastLoop
(
p_playlist
);
}
...
...
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