summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packaging/capi-media-camera.spec2
-rw-r--r--src/camera.c36
2 files changed, 31 insertions, 7 deletions
diff --git a/packaging/capi-media-camera.spec b/packaging/capi-media-camera.spec
index 2bf72be..690d971 100644
--- a/packaging/capi-media-camera.spec
+++ b/packaging/capi-media-camera.spec
@@ -1,6 +1,6 @@
Name: capi-media-camera
Summary: A Camera API
-Version: 0.2.66
+Version: 0.2.67
Release: 0
Group: Multimedia/API
License: Apache-2.0
diff --git a/src/camera.c b/src/camera.c
index 402a45c..5e3bc83 100644
--- a/src/camera.c
+++ b/src/camera.c
@@ -2153,7 +2153,8 @@ int _camera_stop_evas_rendering(camera_h camera, bool keep_screen)
int camera_create(camera_device_e device, camera_h *camera)
{
int sock_fd = -1;
- char *sndMsg;
+ char *send_msg = NULL;
+ int send_ret = 0;
int ret = CAMERA_ERROR_NONE;
int pid = 0;
camera_cli_s *pc = NULL;
@@ -2183,14 +2184,28 @@ int camera_create(camera_device_e device, camera_h *camera)
pid = getpid();
- sndMsg = muse_core_msg_json_factory_new(api,
+ send_msg = muse_core_msg_json_factory_new(api,
MUSE_TYPE_INT, "module", muse_module,
MUSE_TYPE_INT, PARAM_DEVICE_TYPE, device_type,
MUSE_TYPE_INT, "pid", pid,
0);
- muse_core_ipc_send_msg(sock_fd, sndMsg);
- muse_core_msg_json_factory_free(sndMsg);
+ if (!send_msg) {
+ LOGE("NULL msg");
+ ret = CAMERA_ERROR_OUT_OF_MEMORY;
+ goto ErrorExit;
+ }
+
+ send_ret = muse_core_ipc_send_msg(sock_fd, send_msg);
+
+ muse_core_msg_json_factory_free(send_msg);
+ send_msg = NULL;
+
+ if (send_ret < 0) {
+ LOGE("send msg failed %d", errno);
+ ret = CAMERA_ERROR_INVALID_OPERATION;
+ goto ErrorExit;
+ }
pc = g_new0(camera_cli_s, 1);
if (pc == NULL) {
@@ -2206,6 +2221,8 @@ int camera_create(camera_device_e device, camera_h *camera)
goto ErrorExit;
}
+ sock_fd = -1;
+
LOGD("cb info : %d", pc->cb_info->fd);
ret = _client_wait_for_cb_return(api, pc->cb_info, CALLBACK_TIME_OUT);
@@ -2239,9 +2256,16 @@ ErrorExit:
tbm_bufmgr_deinit(bufmgr);
bufmgr = NULL;
+ if (sock_fd > -1) {
+ muse_core_connection_close(sock_fd);
+ sock_fd = -1;
+ }
+
if (pc) {
- _client_callback_destroy(pc->cb_info);
- pc->cb_info = NULL;
+ if (pc->cb_info) {
+ _client_callback_destroy(pc->cb_info);
+ pc->cb_info = NULL;
+ }
g_free(pc);
pc = NULL;
}