[Unit]
Description=muse server
-After=display-manager.service
+After=display-manager.service mm-resource-managerd.service
[Service]
Type=forking
Name: mused
Summary: A multimedia daemon
-Version: 0.3.73
+Version: 0.3.74
Release: 0
Group: System/Libraries
License: Apache-2.0 and BSD-3-Clause
BuildRequires: pkgconfig(libresourced)
BuildRequires: pkgconfig(lwipc)
BuildRequires: pkgconfig(ttrace)
+%else
+BuildRequires: pkgconfig(mm-resource-manager)
%endif
%if 0%{?gtests:1}
BuildRequires: pkgconfig(gmock)
SET(dependents "capi-system-info capi-system-runtime-info cynara-client cynara-creds-socket cynara-session")
SET(dependents ${dependents} " gmodule-2.0 gstreamer-1.0 iniparser libtbm storage libsystemd-daemon")
+IF(MUSE_USE_RM_READY)
+SET(dependents ${dependents} " mm-resource-manager")
+ENDIF(MUSE_USE_RM_READY)
+
INCLUDE(FindPkgConfig)
pkg_check_modules(${MUSE_SERVER} REQUIRED ${dependents})
FOREACH(flag ${${MUSE_SERVER}_CFLAGS})
GModule *ms_module_open(int idx);
void ms_module_dispatch_lock(muse_module_h m);
void ms_module_dispatch_unlock(muse_module_h m);
-int ms_module_dispatch(muse_module_h m, int api);
+int ms_module_dispatch(muse_module_h m);
gboolean ms_module_close(muse_module_h m);
gboolean ms_module_get_loaded_dllsym(int idx);
void ms_module_set_dllsym_value(int idx, const char *name, gpointer value);
g_mutex_init(&m->ch[MUSE_CHANNEL_DATA].data_mutex);
g_cond_init(&m->ch[MUSE_CHANNEL_DATA].data_cond);
LOGD("module fd: %d dll_handle: %p", fd, m->ch[MUSE_CHANNEL_MSG].dll_handle);
- dispatch_ret = ms_module_dispatch(m, api);
+ dispatch_ret = ms_module_dispatch(m);
}
ms_module_dispatch_unlock(m);
case API_DESTROY:
SECURE_LOGI("DESTROY %p %d", m, fd);
ms_module_dispatch_lock(m);
- dispatch_ret = ms_module_dispatch(m, api);
+ dispatch_ret = ms_module_dispatch(m);
ms_module_dispatch_unlock(m);
if (dispatch_ret == MM_ERROR_NONE)
attempt_to_dispatch = FALSE;
}
}
- ms_module_dispatch(m, api);
+ ms_module_dispatch(m);
if (!m->is_created) {
SECURE_LOGW("_ms_ipc_module_cleanup [module %p] [loaded value %d]", m, value);
*/
#include "muse_server_private.h"
+#ifdef MUSE_USE_RM_READY
+#include "mm_resource_manager.h"
+#endif
static GMutex dllsym_table_lock;
g_mutex_unlock(&m->dispatch_lock);
}
-int ms_module_dispatch(muse_module_h m, int api)
+int ms_module_dispatch(muse_module_h m)
{
int ret = MUSE_ERR;
guint id = 0;
gboolean enable_dispatch_timeout_callback = FALSE;
muse_module_dispatchfunc *dispatcher = NULL;
ms_module_t *module = NULL;
+ int api = 0;
muse_return_val_if_fail(m, MUSE_ERR);
+ api = m->api;
module = ms_get_module_instance(m->idx);
muse_return_val_if_fail(module, MUSE_ERR);
muse_return_val_if_fail(module->dllsym, MUSE_ERR);
- muse_return_val_if_fail(api <= API_MAX, MUSE_ERR);
+ muse_return_val_if_fail(api < API_MAX, MUSE_ERR);
+
+#ifdef MUSE_USE_RM_READY
+ if (access(MM_RESOURCE_MANAGER_READY, F_OK) != 0) {
+ LOGE("We skip dispatching (%d) due to resource-manager unavailable", api);
+ ms_cmd_dispatch(m, MUSE_MODULE_COMMAND_RESOURCE_MANAGER_SHUTDOWN);
+ return MUSE_ERR;
+ }
+#endif
g_mutex_lock(&module->lock);
g_module_symbol(module->dllsym, DISPATCHER, (gpointer *)&dispatcher);
enable_dispatch_timeout_callback = _ms_module_enable_dispatch_timeout_callback(api, m);
if (enable_dispatch_timeout_callback)
- id = g_timeout_add_seconds((guint)module->disp_timeout[m->api], (GSourceFunc)_ms_module_dispatch_timeout_callback, (gpointer)m);
+ id = g_timeout_add_seconds((guint)module->disp_timeout[api], (GSourceFunc)_ms_module_dispatch_timeout_callback, (gpointer)m);
ret = dispatcher[api](m);