keyrouter: add exception handling code after memory allocation 41/144341/3
authorSung-Jin Park <sj76.park@samsung.com>
Wed, 16 Aug 2017 09:05:24 +0000 (18:05 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Mon, 21 Aug 2017 06:06:56 +0000 (15:06 +0900)
Change-Id: Idc4f5f1502a9ee7c61d914220283f1f562b059b9
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/lib/keyrouter/keyrouter.c
src/lib/keyrouter/pepper-keyrouter.c

index 979ddb1..12fc8e0 100644 (file)
@@ -105,7 +105,8 @@ keyrouter_key_process(keyrouter_t *keyrouter,
        PEPPER_CHECK(delivery_list, return 0, "Invalid delivery list\n");
 
        if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.excl)) {
-               pepper_list_for_each(info, &keyrouter->hard_keys[keycode].grab.excl, link) {
+               info = pepper_container_of(keyrouter->hard_keys[keycode].grab.excl.next, info, link);
+               if (info) {
                        delivery = (keyrouter_key_info_t *)calloc(1, sizeof(keyrouter_key_info_t));
                        PEPPER_CHECK(delivery, return 0, "Failed to allocate memory\n");
                        delivery->data = info->data;
@@ -114,7 +115,8 @@ keyrouter_key_process(keyrouter_t *keyrouter,
                }
        }
        else if (!pepper_list_empty(&keyrouter->hard_keys[keycode].grab.or_excl)) {
-               pepper_list_for_each(info, &keyrouter->hard_keys[keycode].grab.or_excl, link) {
+               info = pepper_container_of(keyrouter->hard_keys[keycode].grab.or_excl.next, info, link);
+               if (info) {
                        delivery = (keyrouter_key_info_t *)calloc(1, sizeof(keyrouter_key_info_t));
                        PEPPER_CHECK(delivery, return 0, "Failed to allocate memory\n");
                        delivery->data = info->data;
@@ -156,6 +158,8 @@ keyrouter_grab_key(keyrouter_t *keyrouter,
                return TIZEN_KEYROUTER_ERROR_GRABBED_ALREADY;
 
        info = (keyrouter_key_info_t *)calloc(1, sizeof(keyrouter_key_info_t));
+       PEPPER_CHECK(info, return TIZEN_KEYROUTER_ERROR_NO_SYSTEM_RESOURCES, "Failed to allocate memory");
+
        info->data = data;
        pepper_list_init(&info->link);
 
index a873c5c..f7c6f2a 100644 (file)
@@ -366,14 +366,23 @@ _pepper_keyrouter_cb_bind(struct wl_client *client, void *data, uint32_t version
                return;
        }
 
-       wl_resource_set_implementation(resource, &_pepper_keyrouter_implementation,
-                                      pepper_keyrouter, _pepper_keyrouter_cb_destory);
-
        rdata = (resources_data_t *)calloc(1, sizeof(resources_data_t));
+       if (!rdata)
+       {
+               PEPPER_ERROR("Failed to allocate memory !\n");
+
+               wl_resource_destroy(resource);
+               wl_client_post_no_memory(client);
+               return;
+       }
+
        rdata->resource = resource;
        pepper_list_init(&rdata->link);
-
        pepper_list_insert(&pepper_keyrouter->resources, &rdata->link);
+
+
+       wl_resource_set_implementation(resource, &_pepper_keyrouter_implementation,
+                                      pepper_keyrouter, _pepper_keyrouter_cb_destory);
 }
 
 PEPPER_API void