Update poll event for fd hangup 12/236012/7
authorYoungHun Kim <yh8004.kim@samsung.com>
Fri, 12 Jun 2020 02:41:26 +0000 (11:41 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Mon, 15 Jun 2020 10:07:06 +0000 (19:07 +0900)
Change-Id: Iaf62b46d88e18ae97ee2359a64c5a00ef16a6187

packaging/mm-resource-manager.spec
src/daemon/mm_resource_manager_daemon_priv.c

index c697851..a31c09d 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mm-resource-manager
 Summary:    A Multimedia Resource Manager API
-Version:    0.2.30
+Version:    0.2.31
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index b2953ea..bafacb3 100644 (file)
@@ -88,7 +88,7 @@ static void __handle_release_callbacks(GArray *requests);
 static inline void __add_cb_request(GArray *cb_requests, mm_resource_manager_dmn_p mgr,
                mm_resource_manager_res_type_e type, mm_resource_manager_res_volume volume);
 static void __release_all_resources(mm_resource_manager_dmn_p manager);
-static gboolean __poll(struct pollfd sync, mm_resource_manager_id id);
+static gboolean __poll(struct pollfd sync, mm_resource_manager_id id, short events);
 static gboolean __wait_for_release_cb_sync(mm_resource_manager_id id);
 
 
@@ -656,6 +656,7 @@ static void __handle_release_callbacks(GArray *requests)
                                mgr, id, _mm_resource_manager_get_res_str(type), volume);
 
                _mmrm_dmn_dbus_release_callback(id, type, volume);
+
                if (__wait_for_release_cb_sync(id)) {
                        MM_RM_INFO("Release callback sync success RM #%"PRIu64, id);
                        if (conf->volume_would_be_checked[type] && volume != MM_RESOURCE_MANAGER_RES_VOLUME_FULL) {
@@ -672,7 +673,7 @@ static void __handle_release_callbacks(GArray *requests)
                        MM_RM_INFO("RM #%"PRIu64" (type %s mgr %p) set acquired value as false (%d)",
                                id, _mm_resource_manager_get_res_str(type), mgr, mgr->resources[type]->is_acquired);
                } else {
-                       MM_RM_ERROR("Wait for release callback sync failed RM #%"PRIu64, id);
+                       MM_RM_ERROR("Wait for release callback sync failed RM #%"PRIu64" (type %s)", id, _mm_resource_manager_get_res_str(type));
                }
        }
 }
@@ -740,14 +741,14 @@ static void __release_all_resources(mm_resource_manager_dmn_p manager)
        }
 }
 
-static gboolean __poll(struct pollfd sync, mm_resource_manager_id id)
+static gboolean __poll(struct pollfd sync, mm_resource_manager_id id, short events)
 {
        int errsv = 0;
        int try_cnt = 0;
        int ret = 0;
 
        while (try_cnt++ < 3) {
-               sync.events = POLLIN;
+               sync.events = events;
                sync.revents = 0;
 
                ret = poll(&sync, 1, RELEASE_CB_SYNC_TIMEOUT * 1000);
@@ -763,6 +764,7 @@ static gboolean __poll(struct pollfd sync, mm_resource_manager_id id)
                        break;
                }
 
+               MM_RM_INFO("[fd %d] RM #%"PRIu64" events %d", sync.fd, id, events);
                return TRUE;
        }
 
@@ -779,7 +781,7 @@ static gboolean __wait_for_release_cb_sync(mm_resource_manager_id id)
        sync.fd = open(RELEASE_CB_SYNC_PATH, O_RDONLY | O_NONBLOCK);
        MM_RM_RETVM_IF(sync.fd == -1, FALSE, "Sync FIFO cannot be opened");
 
-       if (!__poll(sync, id))
+       if (!__poll(sync, id, POLLIN))
                goto out;
 
        read_size = read(sync.fd, &recv_id, sizeof(recv_id));
@@ -791,7 +793,7 @@ static gboolean __wait_for_release_cb_sync(mm_resource_manager_id id)
        if (id != _mm_rm_hash64(recv_id))
                MM_RM_WARNING("Sync is received from wrong client #%"PRIu64, id);
 
-       ret = __poll(sync, id);
+       ret = __poll(sync, id, POLLIN | POLLHUP);
 
 out:
        close(sync.fd);