Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
GSoC
GSoC2018
macOS
vlc
Commits
04da2f73
Commit
04da2f73
authored
Mar 29, 2017
by
Hugo Beauzée-Luyssen
Browse files
lua: Simplify activated extension detection
parent
17648212
Changes
3
Hide whitespace changes
Inline
Side-by-side
modules/lua/extension.c
View file @
04da2f73
...
...
@@ -102,15 +102,8 @@ int Open_Extension( vlc_object_t *p_this )
p_mgr
->
pf_control
=
Control
;
extensions_manager_sys_t
*
p_sys
=
(
extensions_manager_sys_t
*
)
calloc
(
1
,
sizeof
(
extensions_manager_sys_t
)
);
if
(
!
p_sys
)
return
VLC_ENOMEM
;
p_mgr
->
p_sys
=
p_sys
;
ARRAY_INIT
(
p_sys
->
activated_extensions
);
ARRAY_INIT
(
p_mgr
->
extensions
);
p_mgr
->
p_sys
=
NULL
;
vlc_mutex_init
(
&
p_mgr
->
lock
);
vlc_mutex_init
(
&
p_mgr
->
p_sys
->
lock
);
/* Scan available Lua Extensions */
if
(
ScanExtensions
(
p_mgr
)
!=
VLC_SUCCESS
)
...
...
@@ -133,33 +126,26 @@ int Open_Extension( vlc_object_t *p_this )
void
Close_Extension
(
vlc_object_t
*
p_this
)
{
extensions_manager_t
*
p_mgr
=
(
extensions_manager_t
*
)
p_this
;
msg_Dbg
(
p_mgr
,
"Deactivating all loaded extensions"
);
vlc_mutex_lock
(
&
p_mgr
->
lock
);
p_mgr
->
p_sys
->
b_killed
=
true
;
vlc_mutex_unlock
(
&
p_mgr
->
lock
);
var_DelCallback
(
p_this
,
"dialog-event"
,
vlclua_extension_dialog_callback
,
NULL
);
var_Destroy
(
p_mgr
,
"dialog-event"
);
extension_t
*
p_ext
=
NULL
;
FOREACH_ARRAY
(
p_ext
,
p_mgr
->
p_sys
->
activated_extensions
)
{
if
(
!
p_ext
)
break
;
msg_Dbg
(
p_mgr
,
"Deactivating '%s'"
,
p_ext
->
psz_title
);
Deactivate
(
p_mgr
,
p_ext
);
}
FOREACH_END
()
msg_Dbg
(
p_mgr
,
"All extensions are now deactivated"
);
ARRAY_RESET
(
p_mgr
->
p_sys
->
activated_extensions
);
/* Free extensions' memory */
FOREACH_ARRAY
(
p_ext
,
p_mgr
->
extensions
)
{
if
(
!
p_ext
)
break
;
vlc_mutex_lock
(
&
p_ext
->
p_sys
->
command_lock
);
bool
b_activated
=
p_ext
->
p_sys
->
b_activated
;
vlc_mutex_unlock
(
&
p_ext
->
p_sys
->
command_lock
);
if
(
b_activated
==
true
)
Deactivate
(
p_mgr
,
p_ext
);
if
(
p_ext
->
p_sys
->
b_thread_running
==
true
)
vlc_join
(
p_ext
->
p_sys
->
thread
,
NULL
);
...
...
@@ -190,9 +176,6 @@ void Close_Extension( vlc_object_t *p_this )
FOREACH_END
()
vlc_mutex_destroy
(
&
p_mgr
->
lock
);
vlc_mutex_destroy
(
&
p_mgr
->
p_sys
->
lock
);
free
(
p_mgr
->
p_sys
);
p_mgr
->
p_sys
=
NULL
;
ARRAY_RESET
(
p_mgr
->
extensions
);
}
...
...
@@ -532,7 +515,9 @@ static int Control( extensions_manager_t *p_mgr, int i_control, va_list args )
case
EXTENSION_IS_ACTIVATED
:
p_ext
=
(
extension_t
*
)
va_arg
(
args
,
extension_t
*
);
pb
=
(
bool
*
)
va_arg
(
args
,
bool
*
);
*
pb
=
IsActivated
(
p_mgr
,
p_ext
);
vlc_mutex_lock
(
&
p_ext
->
p_sys
->
command_lock
);
*
pb
=
p_ext
->
p_sys
->
b_activated
;
vlc_mutex_unlock
(
&
p_ext
->
p_sys
->
command_lock
);
break
;
case
EXTENSION_HAS_MENU
:
...
...
@@ -651,8 +636,7 @@ int lua_ExtensionDeactivate( extensions_manager_t *p_mgr, extension_t *p_ext )
{
assert
(
p_mgr
!=
NULL
&&
p_ext
!=
NULL
);
// b_exiting will be set to true once the entire tear down has been completed
if
(
p_ext
->
p_sys
->
b_exiting
==
true
)
if
(
p_ext
->
p_sys
->
b_activated
==
false
)
return
VLC_SUCCESS
;
vlclua_fd_interrupt
(
&
p_ext
->
p_sys
->
dtable
);
...
...
@@ -703,11 +687,14 @@ static int GetMenuEntries( extensions_manager_t *p_mgr, extension_t *p_ext,
assert
(
*
pppsz_titles
==
NULL
);
assert
(
*
ppi_ids
==
NULL
);
if
(
!
IsActivated
(
p_mgr
,
p_ext
)
)
vlc_mutex_lock
(
&
p_ext
->
p_sys
->
command_lock
);
if
(
p_ext
->
p_sys
->
b_activated
==
false
)
{
vlc_mutex_unlock
(
&
p_ext
->
p_sys
->
command_lock
);
msg_Dbg
(
p_mgr
,
"Can't get menu before activating the extension!"
);
return
VLC_EGENERIC
;
}
vlc_mutex_unlock
(
&
p_ext
->
p_sys
->
command_lock
);
if
(
!
LockExtension
(
p_ext
)
)
{
...
...
modules/lua/extension.h
View file @
04da2f73
...
...
@@ -51,18 +51,6 @@ typedef enum
LUA_TEXT
}
lua_datatype_e
;
struct
extensions_manager_sys_t
{
/* List of activated extensions */
DECL_ARRAY
(
extension_t
*
)
activated_extensions
;
/* Lock for this list */
vlc_mutex_t
lock
;
/* Flag indicating that the module is about to be unloaded */
bool
b_killed
;
};
struct
extension_sys_t
{
/* Extension general */
...
...
@@ -99,11 +87,11 @@ struct extension_sys_t
bool
b_exiting
;
bool
b_thread_running
;
//< Only accessed out of the extension thread.
bool
b_activated
;
///< Protected by the command lock
};
/* Extensions: manager functions */
int
Activate
(
extensions_manager_t
*
p_mgr
,
extension_t
*
);
bool
IsActivated
(
extensions_manager_t
*
p_mgr
,
extension_t
*
);
int
Deactivate
(
extensions_manager_t
*
p_mgr
,
extension_t
*
);
void
KillExtension
(
extensions_manager_t
*
p_mgr
,
extension_t
*
p_ext
);
int
PushCommand__
(
extension_t
*
ext
,
bool
unique
,
command_type_e
cmd
,
va_list
options
);
...
...
modules/lua/extension_thread.c
View file @
04da2f73
...
...
@@ -38,7 +38,6 @@ struct thread_sys_t
/** Thread Run */
static
void
*
Run
(
void
*
data
);
static
void
FreeCommands
(
struct
command_t
*
command
);
static
int
RemoveActivated
(
extensions_manager_t
*
p_mgr
,
extension_t
*
p_ext
);
/**
* Activate an extension
...
...
@@ -55,16 +54,8 @@ int Activate( extensions_manager_t *p_mgr, extension_t *p_ext )
msg_Dbg
(
p_mgr
,
"Activating extension '%s'"
,
p_ext
->
psz_title
);
if
(
IsActivated
(
p_mgr
,
p_ext
)
)
{
msg_Warn
(
p_mgr
,
"Extension is already activated!"
);
return
VLC_EGENERIC
;
}
/* Add this script to the activated extensions list */
vlc_mutex_lock
(
&
p_mgr
->
p_sys
->
lock
);
ARRAY_APPEND
(
p_mgr
->
p_sys
->
activated_extensions
,
p_ext
);
vlc_mutex_unlock
(
&
p_mgr
->
p_sys
->
lock
);
if
(
p_sys
->
b_thread_running
==
true
)
return
VLC_SUCCESS
;
/* Prepare first command */
p_sys
->
command
=
calloc
(
1
,
sizeof
(
struct
command_t
)
);
...
...
@@ -87,32 +78,6 @@ int Activate( extensions_manager_t *p_mgr, extension_t *p_ext )
return
VLC_SUCCESS
;
}
/** Look for an extension in the activated extensions list
* @todo FIXME Should be entered with the lock held
**/
bool
IsActivated
(
extensions_manager_t
*
p_mgr
,
extension_t
*
p_ext
)
{
assert
(
p_ext
!=
NULL
);
vlc_mutex_lock
(
&
p_mgr
->
p_sys
->
lock
);
extension_t
*
p_iter
;
FOREACH_ARRAY
(
p_iter
,
p_mgr
->
p_sys
->
activated_extensions
)
{
if
(
!
p_iter
)
break
;
assert
(
p_iter
->
psz_name
!=
NULL
);
if
(
!
strcmp
(
p_iter
->
psz_name
,
p_ext
->
psz_name
)
)
{
vlc_mutex_unlock
(
&
p_mgr
->
p_sys
->
lock
);
return
true
;
}
}
FOREACH_END
()
vlc_mutex_unlock
(
&
p_mgr
->
p_sys
->
lock
);
return
false
;
}
/** Recursively drop and free commands starting from "command" */
static
void
FreeCommands
(
struct
command_t
*
command
)
{
...
...
@@ -176,52 +141,16 @@ int Deactivate( extensions_manager_t *p_mgr, extension_t *p_ext )
return
VLC_SUCCESS
;
}
/** Remove an extension from the activated list */
static
int
RemoveActivated
(
extensions_manager_t
*
p_mgr
,
extension_t
*
p_ext
)
{
if
(
p_mgr
->
p_sys
->
b_killed
)
return
VLC_SUCCESS
;
vlc_mutex_lock
(
&
p_mgr
->
p_sys
->
lock
);
int
i_idx
=
-
1
;
extension_t
*
p_iter
;
FOREACH_ARRAY
(
p_iter
,
p_mgr
->
p_sys
->
activated_extensions
)
{
i_idx
++
;
if
(
!
p_iter
)
{
i_idx
=
-
1
;
break
;
}
assert
(
p_iter
->
psz_name
!=
NULL
);
if
(
!
strcmp
(
p_iter
->
psz_name
,
p_ext
->
psz_name
)
)
break
;
}
FOREACH_END
()
if
(
i_idx
>=
0
)
{
ARRAY_REMOVE
(
p_mgr
->
p_sys
->
activated_extensions
,
i_idx
);
}
else
{
msg_Dbg
(
p_mgr
,
"Can't find extension '%s' in the activated list"
,
p_ext
->
psz_title
);
}
vlc_mutex_unlock
(
&
p_mgr
->
p_sys
->
lock
);
return
(
i_idx
>=
0
)
?
VLC_SUCCESS
:
VLC_EGENERIC
;
}
void
KillExtension
(
extensions_manager_t
*
p_mgr
,
extension_t
*
p_ext
)
{
msg_Dbg
(
p_mgr
,
"Killing extension now"
);
lua_ExtensionDeactivate
(
p_mgr
,
p_ext
);
vlc_mutex_lock
(
&
p_ext
->
p_sys
->
command_lock
);
p_ext
->
p_sys
->
b_activated
=
false
;
p_ext
->
p_sys
->
b_exiting
=
true
;
vlc_cond_signal
(
&
p_ext
->
p_sys
->
wait
);
vlc_mutex_unlock
(
&
p_ext
->
p_sys
->
command_lock
);
RemoveActivated
(
p_mgr
,
p_ext
);
}
/** Push a UI command */
...
...
@@ -347,7 +276,11 @@ static void* Run( void *data )
{
msg_Err
(
p_mgr
,
"Could not activate extension!"
);
Deactivate
(
p_mgr
,
p_ext
);
break
;
}
vlc_mutex_lock
(
&
p_ext
->
p_sys
->
command_lock
);
p_ext
->
p_sys
->
b_activated
=
true
;
vlc_mutex_unlock
(
&
p_ext
->
p_sys
->
command_lock
);
break
;
}
...
...
@@ -359,8 +292,10 @@ static void* Run( void *data )
msg_Warn
(
p_mgr
,
"Extension '%s' did not deactivate properly"
,
p_ext
->
psz_title
);
}
vlc_mutex_lock
(
&
p_ext
->
p_sys
->
command_lock
);
p_ext
->
p_sys
->
b_exiting
=
true
;
RemoveActivated
(
p_mgr
,
p_ext
);
p_ext
->
p_sys
->
b_activated
=
false
;
vlc_mutex_unlock
(
&
p_ext
->
p_sys
->
command_lock
);
break
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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