intptr_t muse_server_ipc_get_handle(muse_module_h m);
int muse_server_ipc_set_handle(muse_module_h m, intptr_t handle);
int muse_server_ipc_get_fd(muse_module_h m, int *fd);
+int muse_server_ipc_get_fds(muse_module_h m, int *fds, int *number);
int muse_server_ipc_set_fd(muse_module_h m, int fd);
/* security */
muse_return_val_if_fail(m, MM_ERROR_INVALID_ARGUMENT);
muse_return_val_if_fail(fd, MM_ERROR_INVALID_ARGUMENT);
- *fd = m->ch[MUSE_CHANNEL_MSG].tbm_fd;
+ *fd = m->ch[MUSE_CHANNEL_MSG].tbm_fd[0];
+ return MM_ERROR_NONE;
+}
+
+int muse_server_ipc_get_fds(muse_module_h m, int *fds, int *number)
+{
+ int i = 0;
+
+ muse_return_val_if_fail(m, MM_ERROR_INVALID_ARGUMENT);
+ muse_return_val_if_fail(fds, MM_ERROR_INVALID_ARGUMENT);
+ muse_return_val_if_fail(number, MM_ERROR_INVALID_ARGUMENT);
+
+ for (i = 0 ; i < MUSE_NUM_FD ; i++) {
+ if (m->ch[MUSE_CHANNEL_MSG].tbm_fd[i] < 0)
+ break;
+
+ fds[i] = m->ch[MUSE_CHANNEL_MSG].tbm_fd[i];
+ }
+
+ *number = i;
+
return MM_ERROR_NONE;
}
return MM_ERROR_INVALID_ARGUMENT;
}
- m->ch[MUSE_CHANNEL_MSG].tbm_fd = fd;
+ m->ch[MUSE_CHANNEL_MSG].tbm_fd[0] = fd;
return MM_ERROR_NONE;
}
static gpointer _ms_ipc_dispatch_worker(gpointer data)
{
int dispatch_ret = MUSE_ERR;
- int len, api, idx, fd;
+ int len, api, idx, fd, i;
int parse_len = 0;
muse_module_h m = NULL;
gboolean attempt_to_dispatch = TRUE;
gboolean value = TRUE;
void *jobj = NULL;
char err_msg[MUSE_MSG_LEN_MAX] = {'\0',};
- int tbm_fd[MUSE_NUM_FD] = { MUSE_ERR, };
int pid = MUSE_ERR;
muse_return_val_if_fail(data, NULL);
while (attempt_to_dispatch) {
memset(m->recv_msg, 0x00, sizeof(m->recv_msg));
- len = muse_core_msg_recv_fd(fd, m->recv_msg, MUSE_MSG_MAX_LENGTH, tbm_fd);
+
+ for (i = 0 ; i < MUSE_NUM_FD ; i++)
+ m->ch[MUSE_CHANNEL_MSG].tbm_fd[i] = -1;
+
+ len = muse_core_msg_recv_fd(fd, m->recv_msg, MUSE_MSG_MAX_LENGTH, m->ch[MUSE_CHANNEL_MSG].tbm_fd);
if (len <= 0) {
strerror_r(errno, err_msg, MUSE_MSG_LEN_MAX);
LOGE("[%s] [%d] recv : %s (%d)", ms_config_get_host_name(m->idx), fd, err_msg, errno);
LOGE("destroy dispatch failed 0x%x", dispatch_ret);
break;
default:
- m->ch[MUSE_CHANNEL_MSG].tbm_fd = tbm_fd[0];
-
if (!m->is_created) {
ms_module_dispatch_lock(m);
if (muse_core_msg_object_get_value(MSG_KEY_MODULE_INDEX, jobj, MUSE_TYPE_INT, &idx)) {