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
43b5fcef
Commit
43b5fcef
authored
Oct 04, 2008
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix vlc_thread_ready invalid use of object_wait
parent
e642dc37
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
10 deletions
+43
-10
include/vlc_threads.h
include/vlc_threads.h
+2
-1
src/libvlc.h
src/libvlc.h
+9
-0
src/libvlccore.sym
src/libvlccore.sym
+1
-0
src/misc/threads.c
src/misc/threads.c
+31
-9
No files found.
include/vlc_threads.h
View file @
43b5fcef
...
...
@@ -166,7 +166,8 @@ enum {
};
#endif
#define vlc_thread_ready vlc_object_signal
VLC_EXPORT
(
void
,
vlc_thread_ready
,
(
vlc_object_t
*
obj
));
#define vlc_thread_ready(o) vlc_thread_ready(VLC_OBJECT(o))
/**
* Save the cancellation state and disable cancellation for the calling thread.
...
...
src/libvlc.h
View file @
43b5fcef
...
...
@@ -149,6 +149,10 @@ extern module_bank_t *p_module_bank;
extern
char
*
psz_vlcpath
;
#ifdef LIBVLC_USE_PTHREAD
# include <semaphore.h>
/* TODO: get rid of vlc_thread_ready and this */
#endif
/**
* Private LibVLC data for each object.
*/
...
...
@@ -162,6 +166,11 @@ typedef struct vlc_object_internals_t
/* Thread properties, if any */
vlc_thread_t
thread_id
;
bool
b_thread
;
#ifdef LIBVLC_USE_PTHREAD
sem_t
thread_ready
;
#elif defined (WIN32)
HANDLE
thread_ready
;
#endif
/* Objects thread synchronization */
vlc_mutex_t
lock
;
...
...
src/libvlccore.sym
View file @
43b5fcef
...
...
@@ -504,6 +504,7 @@ vlc_strtoll
vlc_submodule_create
__vlc_thread_create
__vlc_thread_join
vlc_thread_ready
__vlc_thread_set_priority
vlc_threadvar_create
vlc_threadvar_delete
...
...
src/misc/threads.c
View file @
43b5fcef
...
...
@@ -802,12 +802,12 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line
boot
->
entry
=
func
;
boot
->
object
=
p_this
;
vlc_object_lock
(
p_this
);
/* Make sure we don't re-create a thread if the object has already one */
assert
(
!
p_priv
->
b_thread
);
#if defined( LIBVLC_USE_PTHREAD )
if
(
b_wait
)
sem_init
(
&
p_priv
->
thread_ready
,
0
,
0
);
#ifndef __APPLE__
if
(
config_GetInt
(
p_this
,
"rt-priority"
)
>
0
)
#endif
...
...
@@ -816,33 +816,55 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line
if
(
config_GetType
(
p_this
,
"rt-offset"
)
)
i_priority
+=
config_GetInt
(
p_this
,
"rt-offset"
);
}
#elif defined (WIN32)
if
(
b_wait
)
p_priv
->
thread_ready
=
CreateEvent
(
NULL
,
TRUE
,
FALSE
,
NULL
);
#endif
p_priv
->
b_thread
=
true
;
i_ret
=
vlc_clone
(
&
p_priv
->
thread_id
,
thread_entry
,
boot
,
i_priority
);
if
(
i_ret
==
0
)
{
msg_Dbg
(
p_this
,
"thread %lu (%s) created at priority %d (%s:%d)"
,
(
unsigned
long
)
p_priv
->
thread_id
,
psz_name
,
i_priority
,
psz_file
,
i_line
);
if
(
b_wait
)
{
msg_Dbg
(
p_this
,
"waiting for thread initialization"
);
vlc_object_wait
(
p_this
);
#if defined (LIBVLC_USE_PTHREAD)
sem_wait
(
&
p_priv
->
thread_ready
);
sem_destroy
(
&
p_priv
->
thread_ready
);
#elif defined (WIN32)
WaitForSingleObject
(
p_priv
->
thread_ready
,
INFINITE
);
CloseHandle
(
p_priv
->
thread_ready
);
#endif
}
p_priv
->
b_thread
=
true
;
msg_Dbg
(
p_this
,
"thread %lu (%s) created at priority %d (%s:%d)"
,
(
unsigned
long
)
p_priv
->
thread_id
,
psz_name
,
i_priority
,
psz_file
,
i_line
);
}
else
{
p_priv
->
b_thread
=
false
;
errno
=
i_ret
;
msg_Err
(
p_this
,
"%s thread could not be created at %s:%d (%m)"
,
psz_name
,
psz_file
,
i_line
);
}
vlc_object_unlock
(
p_this
);
return
i_ret
;
}
#undef vlc_thread_ready
void
vlc_thread_ready
(
vlc_object_t
*
obj
)
{
vlc_object_internals_t
*
priv
=
vlc_internals
(
obj
);
assert
(
priv
->
b_thread
);
#if defined (LIBVLC_USE_PTHREAD)
assert
(
pthread_equal
(
pthread_self
(),
priv
->
thread_id
));
sem_post
(
&
priv
->
thread_ready
);
#elif defined (WIN32)
SetEvent
(
priv
->
thread_ready
);
#endif
}
/*****************************************************************************
* vlc_thread_set_priority: set the priority of the current thread when we
* couldn't set it in vlc_thread_create (for instance for the main thread)
...
...
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