提交 48c21b69 authored 作者: Anthony Minessale's avatar Anthony Minessale 提交者: Michael Jerris

FS-7515: prevent unload when in use

上级 d51d4e3c
...@@ -50,11 +50,12 @@ using namespace cv; ...@@ -50,11 +50,12 @@ using namespace cv;
#include <ctype.h> #include <ctype.h>
#define MY_EVENT_VIDEO_DETECT "cv::video_detect" #define MY_EVENT_VIDEO_DETECT "cv::video_detect"
switch_loadable_module_interface_t *MODULE_INTERFACE;
SWITCH_MODULE_LOAD_FUNCTION(mod_cv_load); SWITCH_MODULE_LOAD_FUNCTION(mod_cv_load);
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cv_shutdown); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cv_shutdown);
SWITCH_MODULE_DEFINITION(mod_cv, mod_cv_load, mod_cv_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_cv, mod_cv_load, mod_cv_shutdown, NULL);
static const int NCHANNELS = 3; static const int NCHANNELS = 3;
struct detect_stats { struct detect_stats {
...@@ -1157,6 +1158,7 @@ static switch_bool_t cv_bug_callback(switch_media_bug_t *bug, void *user_data, s ...@@ -1157,6 +1158,7 @@ static switch_bool_t cv_bug_callback(switch_media_bug_t *bug, void *user_data, s
break; break;
case SWITCH_ABC_TYPE_CLOSE: case SWITCH_ABC_TYPE_CLOSE:
{ {
switch_thread_rwlock_unlock(MODULE_INTERFACE->rwlock);
switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ); switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ);
uninit_context(context); uninit_context(context);
} }
...@@ -1208,8 +1210,11 @@ SWITCH_STANDARD_APP(cv_bug_start_function) ...@@ -1208,8 +1210,11 @@ SWITCH_STANDARD_APP(cv_bug_start_function)
parse_params(context, 1, argc, argv); parse_params(context, 1, argc, argv);
} }
switch_thread_rwlock_rdlock(MODULE_INTERFACE->rwlock);
if ((status = switch_core_media_bug_add(session, "cv_bug", NULL, cv_bug_callback, context, 0, SMBF_READ_VIDEO_PING, &bug)) != SWITCH_STATUS_SUCCESS) { if ((status = switch_core_media_bug_add(session, "cv_bug", NULL, cv_bug_callback, context, 0, SMBF_READ_VIDEO_PING, &bug)) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Failure!\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Failure!\n");
switch_thread_rwlock_unlock(MODULE_INTERFACE->rwlock);
return; return;
} }
...@@ -1287,8 +1292,11 @@ SWITCH_STANDARD_API(cv_bug_api_function) ...@@ -1287,8 +1292,11 @@ SWITCH_STANDARD_API(cv_bug_api_function)
init_context(context); init_context(context);
parse_params(context, 2, argc, argv); parse_params(context, 2, argc, argv);
switch_thread_rwlock_rdlock(MODULE_INTERFACE->rwlock);
if ((status = switch_core_media_bug_add(rsession, "cv_bug", NULL, cv_bug_callback, context, 0, SMBF_READ_VIDEO_PING, &bug)) != SWITCH_STATUS_SUCCESS) { if ((status = switch_core_media_bug_add(rsession, "cv_bug", NULL, cv_bug_callback, context, 0, SMBF_READ_VIDEO_PING, &bug)) != SWITCH_STATUS_SUCCESS) {
stream->write_function(stream, "-ERR Failure!\n"); stream->write_function(stream, "-ERR Failure!\n");
switch_thread_rwlock_unlock(MODULE_INTERFACE->rwlock);
goto done; goto done;
} else { } else {
switch_channel_set_private(channel, "_cv_bug_", bug); switch_channel_set_private(channel, "_cv_bug_", bug);
...@@ -1319,17 +1327,18 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_cv_load) ...@@ -1319,17 +1327,18 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_cv_load)
*module_interface = switch_loadable_module_create_module_interface(pool, modname); *module_interface = switch_loadable_module_create_module_interface(pool, modname);
MODULE_INTERFACE = *module_interface;
SWITCH_ADD_APP(app_interface, "cv", "", "", cv_start_function, "", SAF_NONE); SWITCH_ADD_APP(app_interface, "cv", "", "", cv_start_function, "", SAF_NONE);
SWITCH_ADD_APP(app_interface, "cv_bug", "connect cv", "connect cv", SWITCH_ADD_APP(app_interface, "cv_bug", "connect cv", "connect cv",
cv_bug_start_function, "[</path/to/haar.xml>]", SAF_NONE); cv_bug_start_function, "[</path/to/haar.xml>]", SAF_NONE);
SWITCH_ADD_API(api_interface, "cv_bug", "cv_bug", cv_bug_api_function, CV_BUG_API_SYNTAX); SWITCH_ADD_API(api_interface, "cv_bug", "cv_bug", cv_bug_api_function, CV_BUG_API_SYNTAX);
switch_console_set_complete("add cv_bug ::console::list_uuid ::[start:stop"); switch_console_set_complete("add cv_bug ::console::list_uuid ::[start:stop");
/* indicate that the module should continue to be loaded */ /* indicate that the module should continue to be loaded */
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论