surface_queue: use MONOTOINIC timer in pthread_cond
[platform/core/uifw/libtbm.git] / src / tbm_drm_helper_client.c
index affb2dc..29d9409 100644 (file)
@@ -52,6 +52,8 @@ struct wayland_tbm_drm_auth_client {
        uint32_t capabilities;
 };
 
+static int tbm_drm_fd = -1;
+
 /* LCOV_EXCL_START */
 static void
 handle_tbm_drm_authentication_info(void *data, struct wl_tbm_drm_auth *wl_tbm_drm_auth, const char *device_name, uint32_t capabilities, int32_t auth_fd)
@@ -82,9 +84,14 @@ _wayland_tbm_drm_auth_client_registry_handle_global(void *data, struct wl_regist
        }
 }
 
+static void
+_wayland_tbm_drm_auth_client_registry_remove_global(void *data, struct wl_registry *registry, uint32_t name)
+{
+}
+
 static const struct wl_registry_listener registry_listener = {
        _wayland_tbm_drm_auth_client_registry_handle_global,
-       NULL
+       _wayland_tbm_drm_auth_client_registry_remove_global
 };
 
 int
@@ -101,7 +108,7 @@ tbm_drm_helper_get_auth_info(int *auth_fd, char **device, uint32_t *capabilities
 
        display = wl_display_connect("tbm-drm-auth");
        if (!display) {
-               TBM_LOG_E("Failed to connect display\n");
+               TBM_ERR("Failed to connect display\n");
                free(tbm_drm_client);
 
                return 0;
@@ -111,7 +118,7 @@ tbm_drm_helper_get_auth_info(int *auth_fd, char **device, uint32_t *capabilities
 
        wl_registry = wl_display_get_registry(display);
        if (!wl_registry) {
-               TBM_LOG_E("Failed to get registry\n");
+               TBM_ERR("Failed to get registry\n");
                wl_display_disconnect(display);
                free(tbm_drm_client);
 
@@ -120,7 +127,7 @@ tbm_drm_helper_get_auth_info(int *auth_fd, char **device, uint32_t *capabilities
 
        wl_registry_add_listener(wl_registry, &registry_listener, tbm_drm_client);
        if (wl_display_roundtrip(display) < 0) { //For Gloabl registry
-               TBM_LOG_E("Failed to wl_display_roundtrip for global registry\n");
+               TBM_ERR("Failed to wl_display_roundtrip for global registry\n");
                wl_registry_destroy(wl_registry);
                wl_display_disconnect(display);
                free(tbm_drm_client);
@@ -128,7 +135,7 @@ tbm_drm_helper_get_auth_info(int *auth_fd, char **device, uint32_t *capabilities
        }
 
        if (!tbm_drm_client->wl_tbm_drm_auth) {
-               TBM_LOG_E("Failed to get wl_tbm_drm_auth interface\n");
+               TBM_ERR("Failed to get wl_tbm_drm_auth interface\n");
                wl_registry_destroy(wl_registry);
                wl_display_disconnect(display);
                free(tbm_drm_client);
@@ -138,7 +145,7 @@ tbm_drm_helper_get_auth_info(int *auth_fd, char **device, uint32_t *capabilities
 
        wl_tbm_drm_auth_get_authentication_info(tbm_drm_client->wl_tbm_drm_auth);
        if (wl_display_roundtrip(display) < 0) {
-               TBM_LOG_E("Failed to wl_display_roundtrip get auth info\n");
+               TBM_ERR("Failed to wl_display_roundtrip get auth info\n");
                wl_tbm_drm_auth_set_user_data(tbm_drm_client->wl_tbm_drm_auth, NULL);
                wl_tbm_drm_auth_destroy(tbm_drm_client->wl_tbm_drm_auth);
                wl_registry_destroy(wl_registry);
@@ -148,7 +155,7 @@ tbm_drm_helper_get_auth_info(int *auth_fd, char **device, uint32_t *capabilities
        }
 
        if (tbm_drm_client->auth_fd < 0) {
-               TBM_LOG_E("Failed to get auth info\n");
+               TBM_ERR("Failed to get auth info\n");
                wl_tbm_drm_auth_set_user_data(tbm_drm_client->wl_tbm_drm_auth, NULL);
                wl_tbm_drm_auth_destroy(tbm_drm_client->wl_tbm_drm_auth);
                wl_registry_destroy(wl_registry);
@@ -191,68 +198,64 @@ tbm_drm_helper_get_auth_info(int *auth_fd, char **device, uint32_t *capabilities
 void
 tbm_drm_helper_set_fd(int fd)
 {
-       char buf[32];
-       int ret;
+       int fd_max = tbm_bufmgr_get_fd_limit();
 
-       snprintf(buf, sizeof(buf), "%d", fd);
+       if (tbm_drm_fd == fd)
+               return;
 
-       ret = setenv("TBM_DRM_FD", (const char*)buf, 1);
-       if (ret) {
-               TBM_LOG_E("failed to set TBM_DRM_FD to %d\n", fd);
+       if (fd < 0 || fd > fd_max) {
+               TBM_ERR("%d out of fd range\n", fd);
                return;
        }
 
-       TBM_LOG_I("TBM_DRM_FD: %d\n", fd);
+       if (tbm_drm_fd != -1)
+               TBM_WRN("already has TBM_DRM_FD: %d\n", tbm_drm_fd);
+
+       tbm_drm_fd = fd;
+
+       TBM_INFO("TBM_DRM_FD: %d\n", tbm_drm_fd);
 }
 
 void
 tbm_drm_helper_unset_fd(void)
 {
-       int ret;
-
-       ret = unsetenv("TBM_DRM_FD");
-       if (ret) {
-               TBM_LOG_E("failed to unset TBM_DRM_FD\n");
-               return;
-       }
+       tbm_drm_fd = -1;
+       TBM_INFO("TBM_DRM_FD: %d\n", tbm_drm_fd);
 }
 
 int
 tbm_drm_helper_get_fd(void)
 {
-       const char *value;
-       int ret, flags, fd = -1;
-       int new_fd = -1;
-
-       value = (const char*)getenv("TBM_DRM_FD");
-       if (!value)
-               return -1;
+       int new_fd, flags;
 
-       ret = sscanf(value, "%d", &fd);
-       if (ret <= 0)
+       if (tbm_drm_fd == -1) {
+               TBM_ERR("no drm fd");
                return -1;
+       }
 
-       TBM_LOG_I("TBM_DRM_FD: %d\n", fd);
+       TBM_INFO("TBM_DRM_FD: %d\n", tbm_drm_fd);
 
-       flags = fcntl(fd, F_GETFD);
+       flags = fcntl(tbm_drm_fd, F_GETFD);
        if (flags == -1) {
-               TBM_LOG_E("fcntl failed: %m\n");
+               TBM_ERR("fcntl failed: %m");
                return -1;
        }
 
-       new_fd = dup(fd);
+       new_fd = dup(tbm_drm_fd);
        if (new_fd < 0) {
-               TBM_LOG_E("dup failed: %m\n");
+               TBM_ERR("dup failed: %m");
                return -1;
        }
 
-       fcntl(new_fd, F_SETFD, flags|FD_CLOEXEC);
+       if (fcntl(new_fd, F_SETFD, flags|FD_CLOEXEC) == -1) {
+               TBM_ERR("failed to set fd\n");
+               close(new_fd);
+               return -1;
+       }
 
-       TBM_LOG_I("Return TBM_FD: %d\n", new_fd);
+       TBM_INFO("Return TBM_FD: %d\n", new_fd);
 
        return new_fd;
-
-       return fd;
 }
 
 /* LCOV_EXCL_STOP */